Home » Android -13. 데이터베이스 처리

Android -13. 데이터베이스 처리

SQLiteDatabase라는 DATABASE 를 제공해 주고 있다. 만약 DATA를 저장해서 사용하게 되는 경우가 생길 경우 SQLiteDatabase 와 DatabaseHelper(DB생성 및 관리를 도와준다.) 를 사용해서 좀더 편리하게 DATABASE를 관리 할 수 있다.

<step11/DBHelper>
[php]
public class DBHelper extends SQLiteOpenHelper{ (1)
private static final int DATABASE_VERSION = 1;
private static final String DATABASAE_NAME = "contactsdb";
private static final String TABLE_NAME = "contacts";

private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_PHONE = "phone";
private static final String KEY_EMAIL = "email";

private SQLiteDatabase db;
// 생성자
public DBHelper(Context context) {
super(context, DATABASAE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
// 테이블 생성
String createTable = "CREATE TABLE " + TABLE_NAME
+ "(" + KEY_ID + " INTEGER PRIMARY KEY, "
+ KEY_NAME + " TEXT, "
+ KEY_EMAIL + " TEXT, "
+ KEY_PHONE + " TEXT" +")";
db.execSQL(createTable); (2)
}

// db 버전이 업그레이드 될시
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { (3)
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
[/php]

번호 설명
(1) SQLiteOpenHelper 상속
(2) 쿼리문을 날려주는 메소드. 예제에서는 테이블을 생성해준다.
(3) db 구조 변경 등 db 버전이 변경 될 때 실행 되는 메소드

<step11/DBHelper>
[php]
// insert
public void insert(ContactsBean bean) {
db = getWritableDatabase(); (1)

ContentValues values = new ContentValues(); (2)
// insert 할 값 설정
values.put(KEY_NAME, bean.getName()); (3)
values.put(KEY_EMAIL, bean.getEmail());
values.put(KEY_PHONE, bean.getPhone());
db.insert(TABLE_NAME, null, values); (4)
db.close(); (5)
}

// 전체 검색
public ArrayList<ContactsBean> selectAll() {
db = getReadableDatabase(); (6)
ArrayList<ContactsBean> contactsList = new ArrayList<ContactsBean>();
// 조회
String searchSql = "SELECT * FROM " + TABLE_NAME;
Cursor cursor = db.rawQuery(searchSql, null); (7)
Logger.i("count : " + cursor.getCount());
if(cursor.moveToFirst()) { (8)
do{
ContactsBean bean = new ContactsBean();
bean.setId(cursor.getInt(0)); (9)
bean.setName(cursor.getString(1));
bean.setEmail(cursor.getString(2));
bean.setPhone(cursor.getString(3));
contactsList.add(bean);
}while(cursor.moveToNext()); (10)
}
cursor.close(); (11)
db.close();

return contactsList;
}
… 생략
[/php]

번호 설명
(1) 쓰기 가능한 db 획득
(2) value 값을 지정할 수 있도록 도와주는 객체 생성
(3) 첫번째 인자로 컬럼 이름을 주고 뒤에 값을 주면 나중에 insert를 할 때 자동으로 인식되어 실행된다.
(4) Insert 메소드. 인자로 테이블이 이름과 앞서 설정한 ContentValues 객체를 넘겨준다.
(5) Db를 사용한 뒤 close를 하여 반환한다.
(6) 읽기만 가능한 db 획득
(7) Select 문장을 실행 시켜주는 메소드로 Cursor로 반환한다.
(8) Cursor의 첫 레코드로 이동
(9) Cursor 객체의 getter를 통해 데이터를 가져온다.
(10) 다음 레코드가 있는지 판단
(11) Cursor를 사용한 후에 close를 통해 반환한다.

<step11/DatabaseSample>
[php]
contactsDbHelper = new DBHelper(DatabaseSample.this); (1)
… 생략
contactsDbHelper.insert(bean); (2)
… 생략
[/php]

번호 설명
(1) Db를 사용하기 위한 객체 생성
(2) 앞서 만든 insert 명령 실행


그림 48. Database