헬퍼클래스(HelperClass) (=업데이트 등의 디비관리) 사용방법임.
※ 이전코드는 역시 아래 주소 참고. :
https://asterisco.tistory.com/70
00. 아래와같이 가장 아래쪽에 헬퍼클래스를 만들고 적절하게 코드를 수정하자. (정상작동확인을 위해 토스트추가.)
package com.example.joey.mydbdb;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText editText;
EditText editText2;
TextView textView;
String databaseName;
SQLiteDatabase database;
String tableName;
CustomerDatabaseHelper databaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
editText2 = (EditText) findViewById(R.id.editText02);
textView = (TextView) findViewById(R.id.textView);
}
public void button01(View v) {
databaseName = editText.getText().toString();
try {
// database = openOrCreateDatabase(databaseName, Context.MODE_PRIVATE, null);
databaseHelper = new CustomerDatabaseHelper(getApplicationContext(), databaseName, null, 1 /*버전넘버*/);
database = databaseHelper.getWritableDatabase();
println("데이터베이스를 열었습니다. :" + databaseName);
} catch (Exception e) {
e.printStackTrace();
}
}
public void button02(View v) {
// createTable();
}
public void createTable(SQLiteDatabase db) {
tableName = editText2.getText().toString();
try {
if (db != null) { //database가 null 값이면 수행
db.execSQL("CREATE TABLE if not exists " + tableName + "(" // 존재하지 않을때 생성하라
+ "_id integer PRIMARY KEY autoincrement,"
+ "name text, "
+ "age integer, "
+ "mobile text "
+ ")");
println("테이블을 만들었습니다. : " + tableName);
} else {
println("데이터베이스를 먼저 열어야 합니다.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void changeTable(SQLiteDatabase db) { //데이터가 있는경우에
try {
if (db != null) { //database가 null 값이면 수행
db.execSQL("CREATE TABLE if not exists " + "PRODUCT" + "(" // 존재하지 않을때 생성하라
+ "_id integer PRIMARY KEY autoincrement,"
+ "name text, "
+ "price integer "
+ ")");
println("테이블을 추가로 만들었습니다. : " + "PRODUCT");
} else {
println("데이터베이스를 먼저 열어야 합니다.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void button03(View v) {
try {
if (tableName == null) { //tableName이 null 값이면 수행
tableName = editText2.getText().toString();
}
if (database != null) {
database.execSQL("INSERT INTO " + tableName + "(name, age, mobile) VALUES"
+ "('김사과', 20, '010-1234-5678')");
println("데이터를 추가했습니다. ");
} else {
println("데이터베이스를 먼저 열어야 합니다.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void button04(View v) {
try {
if (tableName == null) { //tableName이 null 값이면 수행
tableName = editText2.getText().toString();
}
if (database != null) {
Cursor cursor = database.rawQuery("SELECT name, age, mobile FROM " + tableName, null);
int count = cursor.getCount();
println("결과 레코드의 수 : " + count);
for (int i = 0; i < count; i++) {
cursor.moveToNext();
String name = cursor.getString(0);
int age = cursor.getInt(1);
String mobile = cursor.getString(2);
println("레코드 #" + i + " : " + name + ", " + age + ", " + mobile);
}
cursor.close();
println("데이터를 조회했습니다.");
} else {
println("데이터베이스를 먼저 열어야 합니다.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void println(String data) {
textView.append(data + "\n");
}
class CustomerDatabaseHelper extends SQLiteOpenHelper {
public CustomerDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
Toast.makeText(getApplicationContext(), "Helper onOpen() 호출됨.", Toast.LENGTH_SHORT).show();
}
@Override
public void onCreate(SQLiteDatabase db) {
createTable(db);
Toast.makeText(getApplicationContext(), "Helper onCreate() 호출됨.", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
changeTable(db);
Toast.makeText(getApplicationContext(), "Helper onUpgrade() 호출됨. : " + oldVersion + "-> " + newVersion, Toast.LENGTH_SHORT).show();
}
}
}// main 종료
01. 실행시켜본다.
02. 데이터베이스열기를 눌러본다.
03. 헬퍼클래스로 작동 된것을 확인 할 수 있다.
04. 다시 메인Script로 돌아와서 버전정보를 2로 올려보자.
05. 다시한번 실행시켜보자.
06. 데이터베이스열기 버튼을 눌러보자.
07. 버전이 바뀌면서 안에 들어가있는 스키마도 같이 바뀌는 것을 확인 할 수 있다.