- SQLiteOpenHelper 클래스는 DB를 (생성||열기||업데이트)위해 필요한 일들을 도와주는 역활을 한다.
1.1 데이터 베이스 생성 혹은 열기위해 필요한 객체를 생성
- public DataBaseHelper(Context context, String name, CursorFactory factory, int version)
1.2 처음에 DB가 생성될때 호출됨
- public void onCreate(SQLiteDatabase database)
1.3 DB가 존재할때 DB를 열때 호출됨
- public void onOpen(SQLiteDatabase database)
1.4 DB가 존재할때 DB버전이 바뀌면 호출됨
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
2. 예제
android version = jelly bean
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MyDataBaseHelperActivity extends Activity {
public static final String tableName = "CUSTOMER";
Button button1;
Button button2;
Button button3;
Button button4;
TextView text1;
DataBaseHelper helper;
SQLiteDatabase database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
//button3 = (Button) findViewById(R.id.button3);
//button4 = (Button) findViewById(R.id.button4);
text1 = (TextView) findViewById(R.id.text1);
// 디비 생성
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
createDatabase();
}
});
// 커리 실행
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
queryData();
}
});
}
private void createDatabase() {
int version = 1;
String name = "customer.db";
// database = openOrCreateDatabase(name, MODE_WORLD_WRITEABLE, null);
//헬퍼를 이용해 디비생성방법
helper = new DataBaseHelper(getApplicationContext(), name, null, version);
database = helper.getWritableDatabase();
}
private void queryData() {
String sql = "select id,name,age from " + tableName + " where age >18";
// 데이터를 받을땐 커서로 받는다
Cursor cursor = database.rawQuery(sql, null);
// cursor.getcount() 레코드 갯수
// cursor.moveToNext() 다음 레코드를 조회
// cursor.getString() 칼럼데이타 조회
if (cursor != null) {
int count = cursor.getCount();
text1.append("데이터를 조회햇어요. 레코드 갯수" + count + "\n");
for (int i = 0; i < count; i++) {
cursor.moveToNext();
String name = cursor.getString(1);
text1.append("데이터 #" + i + ":" + name + "\n");
}
}
}
class DataBaseHelper extends SQLiteOpenHelper {
// 데이터베이스를 생성할때 필요한 생성자
// context = 불러올 액티비티
// name = 데이터베이스 이름
// factory = ??
// version = 데이터베이스 버전
public DataBaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
// 데이터베이스를 처음 생성할때 불려지는 메서드 생성되있으면 호출되지않는다.
@Override
public void onCreate(SQLiteDatabase database) {
createTable(database);
insertData(database);
text1.append("헬퍼를 이용해 데이터베이스를 생성 했어요.\n");
}
// 데이터베이스가 생성되거나 존재할때 데이터베이스를 여는 메서드
@Override
public void onOpen(SQLiteDatabase database) {
text1.append("헬퍼를 이용해 데이터베이스를 오픈 했어요.\n");
}
// 데이터베이스가 업그레이드 될때 호출되는 메서든
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
text1.append("헬퍼를 이용해 데이터베이스를 업그레이드 했어요.\n");
}
private void createTable(SQLiteDatabase database) {
String sql = "create table " + tableName + "(id text,name text,age integer)";
try {
// sql 실행하는 메서드
database.execSQL(sql);
text1.append("테이블을 만들었어요\n");
} catch (Exception e) {
text1.append("테이블 만들때 예외\n");
e.printStackTrace();
}
}
private void insertData(SQLiteDatabase database) {
// 데이타베이스 트렌젝션 시작
database.beginTransaction();
try {
String sql = "insert into " + tableName + "(id,name,age)" + " values('100','홍길동',21)";
// sql 실행하는 메서드
database.execSQL(sql);
sql = "insert into " + tableName + "(id,name,age)" + " values('200','소녀시대',19)";
// sql 실행하는 메서드
database.execSQL(sql);
// 데이타베이스 트렌젝션 성공
database.setTransactionSuccessful();
} catch (Exception e) {
text1.append("데이터 추가할 때 예외" + e.getMessage() + "\n");
e.printStackTrace();
} finally {
// 데이타베이스 트렌젝션 끝 이것은 꼭 해줘야한다.
database.endTransaction();
}
text1.append("데이터를 넣었어요\n");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my_data_base_helper, menu);
return true;
}
}
댓글 없음:
댓글 쓰기