티스토리 뷰

Android/Concept

[Android] SQLite Database

ch4njun 2020. 12. 4. 19:40
반응형

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
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함