안드로이드 스튜디오 예제 SQLite 활용하기 (SQLiteDatabase)
- Android Studio
- 2020. 6. 15.
계발에서 개발까지
https://developer.android.com/training/data-storage/sqlite?hl=ko
SQLite 활용하기
안드로이드 프로그래밍에 SQLite를 활용하는 방법을 알아보겠습니다. 안드로이드에서 SQLite를 사용할 때는 일반적으로 SQLiteOpenHelper 클래스, SQLiteDatabase클래스, Cursor 인터페이스를 사용합니다.
일단 새 프로젝트를 만들고 예제를 따라해보겠습니다.
activity_main.xml
자 이런식으로 레이아웃을 구성합니다 목록과 수량을 입력하고 조회하는 프로그램입니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:orientation="horizontal"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="목록"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/edtName"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:orientation="horizontal"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="수량"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/edtNumber"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:orientation="horizontal"
android:layout_weight="1">
<Button
android:id="@+id/btnInit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="초기화"/>
<Button
android:id="@+id/btnInsert"
android:text="입력"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnSelect"
android:text="조회"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:orientation="horizontal"
android:layout_weight="8">
<EditText
android:id="@+id/edtNameResult"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<EditText
android:id="@+id/edtNumberResult"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
MainActivity.java
우선 onCreate() 메소드 밖에 SQLiteOpenHelper클래스르에서 상속받은 클래스를 정의합니다 onCreate() 메소드에는 테이블 생성하는 기능을 코딩하고 onUpgrade() 메소드에서는 테이블을 삭제한 후 다시 생성합니다.
public class myDBHelper extends SQLiteOpenHelper {
public myDBHelper(Context context) {
super(context, "groupDB", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE groupTBL ( gName CHAR(20) PRIMARY KEY,gNumber INTEGER);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS groupTBL");
onCreate(db);
}
}
테이블을 생성하는 SQL문은 SQLiteDatabase 클래스의 execSQL()메소드로 실행합니다. 바로 아래의 onUpgrade()에서 호출되거나 데이터를 입력할 때 혹은 테이블이 없을 때 처음 1회 호출됩니다.
이제 메인 액티비티 클래스를 코딩하겠습니다 사용할 다음 변수를 선언하고 메인 액티비티 클래스의 onCreate()에서는 위젯 변수를 대입해줍니다.
public class MainActivity extends AppCompatActivity {
myDBHelper myDBHelper;
EditText edtName, edtNumber, edtNameResultm, edtNumberResult;
Button btnInit, btnInsert, btnSelect;
SQLiteDatabase sqlDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("구매 리스트 관리");
edtName = (EditText) findViewById(R.id.edtName);
edtNumber = (EditText) findViewById(R.id.edtNumber);
edtNameResultm = (EditText) findViewById(R.id.edtNameResult);
edtNumberResult = (EditText) findViewById(R.id.edtNumberResult);
btnInit = (Button) findViewById(R.id.btnInit);
btnInsert = (Button) findViewById(R.id.btnInsert);
btnSelect = (Button) findViewById(R.id.btnSelect);
<초기화>를 클릭했을 때 동작하는 리스너 , <입력>을 클릭하면 에디트텍스트이 값이 입력괴는 리스너, 마지막으로 <조회>를 클릭할 때, 테이블에 입력된 내용이 모두 아래쪽 에디트텍스트에 출력되는 리스너를 코딩합니다.
myDBHelper = new myDBHelper(this);
btnInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sqlDB = myDBHelper.getWritableDatabase();
myDBHelper.onUpgrade(sqlDB,1,2);
sqlDB.close();
}
});
btnInsert.setOnClickListener(new View.OnClickListener() {
@SuppressLint("WrongConstant")
@Override
public void onClick(View v) {
sqlDB = myDBHelper.getWritableDatabase();
sqlDB.execSQL("INSERT INTO groupTBL VALUES ( '" + edtName.getText().toString() + "' , "+edtNumber.getText().toString() +");");
sqlDB.close();
Toast.makeText(getApplicationContext(),"입력됨",0).show();
}
});
btnSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sqlDB = myDBHelper.getReadableDatabase();
Cursor cursor;
cursor = sqlDB.rawQuery("SELECT * FROM groupTBL;",null);
String strNames = "목록 리스트"+"\r\n"+"\r\n";
String strNumbers = "수량"+"\r\n"+"\r\n";
while (cursor.moveToNext()){
strNames += cursor.getString(0) + "\r\n";
strNumbers += cursor.getString(1) + "\r\n";
}
edtNameResultm.setText(strNames);
edtNumberResult.setText(strNumbers);
cursor.close();
sqlDB.close();
}
});
이때myDBHelper 인스턴트를 생성합니다 myDBHelper()생성자가 실행 되어 groupDB 파일이 생성됩니다.
MainActivity.java
메인 액티비티의 총 소스코드입니다.
public class MainActivity extends AppCompatActivity {
myDBHelper myDBHelper;
EditText edtName, edtNumber, edtNameResultm, edtNumberResult;
Button btnInit, btnInsert, btnSelect;
SQLiteDatabase sqlDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("구매 리스트 관리");
edtName = (EditText) findViewById(R.id.edtName);
edtNumber = (EditText) findViewById(R.id.edtNumber);
edtNameResultm = (EditText) findViewById(R.id.edtNameResult);
edtNumberResult = (EditText) findViewById(R.id.edtNumberResult);
btnInit = (Button) findViewById(R.id.btnInit);
btnInsert = (Button) findViewById(R.id.btnInsert);
btnSelect = (Button) findViewById(R.id.btnSelect);
myDBHelper = new myDBHelper(this);
btnInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sqlDB = myDBHelper.getWritableDatabase();
myDBHelper.onUpgrade(sqlDB,1,2);
sqlDB.close();
}
});
btnInsert.setOnClickListener(new View.OnClickListener() {
@SuppressLint("WrongConstant")
@Override
public void onClick(View v) {
sqlDB = myDBHelper.getWritableDatabase();
sqlDB.execSQL("INSERT INTO groupTBL VALUES ( '" + edtName.getText().toString() + "' , "+edtNumber.getText().toString() +");");
sqlDB.close();
Toast.makeText(getApplicationContext(),"입력됨",0).show();
}
});
btnSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sqlDB = myDBHelper.getReadableDatabase();
Cursor cursor;
cursor = sqlDB.rawQuery("SELECT * FROM groupTBL;",null);
String strNames = "목록 리스트"+"\r\n"+"\r\n";
String strNumbers = "수량"+"\r\n"+"\r\n";
while (cursor.moveToNext()){
strNames += cursor.getString(0) + "\r\n";
strNumbers += cursor.getString(1) + "\r\n";
}
edtNameResultm.setText(strNames);
edtNumberResult.setText(strNumbers);
cursor.close();
sqlDB.close();
}
});
}
public class myDBHelper extends SQLiteOpenHelper {
public myDBHelper(Context context) {
super(context, "groupDB", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE groupTBL ( gName CHAR(20) PRIMARY KEY,gNumber INTEGER);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS groupTBL");
onCreate(db);
}
}
}
'Android Studio' 카테고리의 다른 글
안드로이드 스튜디오 4대 컴포넌트란 (0) | 2020.06.26 |
---|---|
안드로이드 스튜디오 이미지 뷰 쉽게 라운딩 주기 (0) | 2020.06.25 |
안드로이드 스튜디오 원형이미지 생성(Circularimageview) (0) | 2020.06.11 |
안드로이드 스튜디오 그라데이션 만들기 (xml) (0) | 2020.06.08 |
안드로이드 스튜디오 액티비티(Activity)생명주기 (0) | 2020.06.04 |