티스토리 뷰
반응형
SQLite Database?
안드로이드에서 기본적으로 Database를 제공하는데 SQLite이다.
Oracle, MySQL와 같은 관계형 DB이지만, 소규모 데이터 저장에 적합한 DB이다. 다양한 스마트폰이나 임베디드 시스템에 탑재되어 있다. (가벼우니까~)
Oracle, MySQL은 별도의 프로세스형태로 동작하지만 SQLite 엔진은 라이브러리 형식으로 지원된다.
데이터베이스를 사용하기 위한 Database Manager 클래스를 생성한다.
public class StudentDBManager {
static final String DB_STUDENTS = "Students.db";
static final String TABLE_STUDENTS = "Students";
static final int DB_VERSION = 1;
Context mContext = null;
private static StudentsDBManager mDbManager = null;
// 이 객체가 SQLite Database를 사용하기 위한 클래스로 생성된 객체이다.
private SQLiteDatabase mDatabase = null;
// 싱글톤 패턴으로 구현한 모습을 볼 수 있다.
// 여러 개의 DBManager가 생성되고, 여러 스레드에서 접근하면 동기화 문제가 발생할 수
// 있기 때문에 안정적인 프로그래밍을 위해 이와같은 디자인 패턴을 적용한다.
public static StudentsDBManager getInstance(Context context) {
if(mDbManager == null)
mDbManager = new StudentDBManager(context);
return mDbManager;
}
}
싱글톤 패턴을 사용해 객체를 생성해 반환하는데, 이때 사용되는 생성자를 구현해보자.
private StudentsDBManager(Context context) {
mContext = context;
// SQLite Database를 생성하거나 이미 존재한다면 연다.
mDatabase = context.openOrCreateDatabase(DB_STUDENTS, Context.MODE_PRIVATE, null);
// execSQL 함수를 사용해 Query문을 동작시킬 수 있다.
mDatabase.execSQL(
"CREATE TABLE IF NOT EXISTS " + TABLE_STUDENTS +
"( _id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"number TEXT, " +
"name TEXT, " +
"department TEXT, " +
"grade INTEGER);");
}
약간 다른게 CREATE TABLE 이후에 IF NOT EXISTS 키워드가 붙는 것을 확인할 수 있다.
이제 여러가지 기능들을 StudentDBManager에 구현해본다.
기본적으로 execSQL로 insert, delete, select와 같은 기능을 구현할수도 있지만, 이미 구현되어 있는 insert 멤버 함수를 통해서도 구현할 수 있다. 후자의 경우를 살펴보자.
public long insert(ContentValues addRowValue) {
return mDatabase.insert(TABLE_STUDENTS, null, addRowValue);
}
public Cursor query(String[] columns, String selection, String[] selectionArgs,
String groupBy, String having, String orderBy) {
return mDatabase.query(TABLE_STUDENTS, columns, selection, selectionArgs, groupBy, having, orderBy);
}
public int update(ContentValues updateRowValue, String whereClause, String[] whereArgs) {
return mDatabase.update(TABLE_STUDENTS, updateRowValue, whereClause, whereArgs);
}
public int delete(String whereClause, String[] whereArgs) {
return mDatabase.delete(TABLE_STUDENTS, whereClause, whereArgs);
}
그러면 이렇게 생성한 StudentDBManger 클래스의 객체를 생성해 데이터 베이스를 이용해 보자.
private StudentDBManger mDbManager = null;
protected void onCreate(Bundle savedInstanceStat) {
// ...
mDisplayDbEt = (EditText)findViewId(R.id.edit_text);
mDbManager = StudentDBManager.getInstance(this);
}
public void onClick(View v) {
ContentValues addRowValue = new ContentValues();
addRowValue.put("number", "2015726068");
addRowValue.put("name", "홍길동");
addRowValue.put("department", "컴퓨터");
addRowValue.put("grade", "3");
mDbManager.insert(addRowValue);
}
public void onClickQuery(View v) {
String[] columns = new String[]{"_id", "number", "name", "department", "grade"};
Cursor c = mDbManager.query(columns, null, null, null, null, null);
if(c != null) {
mDisplayDbEt.setText("");
while(c.moveToNext()) {
int id = c.getInt(0);
String number = c.getString(1);
String name = c.getString(2);
String department = c.getString(3);
int grade = c.getInt(4);
mDisplayDbEt.append( .... );
c.close();
}
}
}
public void onClickUpdate(View v) {
ContentValues updateRowValue = new ContentValues();
updateRowValue.put("name", "고길동");
int updateCnt = mDbManager.update(updateRowValue, "number=2015726068", null);
}
이와같이 Database를 사용하면 아래 겅로에 해당 파일이 만들어지게 된다.
반응형
'Android > Concept' 카테고리의 다른 글
[Android] BaseAdapter (View Group) (0) | 2020.12.09 |
---|---|
[Android] Shared Preference (0) | 2020.12.04 |
[Android] 파일과 데이터베이스 (0) | 2020.12.01 |
[Android] Remote Bound Service (AIDL 사용) (0) | 2020.11.30 |
[Android] Local Broadcast (0) | 2020.11.29 |