SQLite를 사용하여 데이터 저장  |  Android 개발자  |  Android Developers

[Android] SQLite 사용하기

SQLite Database


SQLite

SQLite


SQLite는 안드로이드의 기본 내장된 Local Database 라이브러리다.

SQLite 는 RDB 형태로 Table 조회, 변경, 삭제 를 지원한다.

사용방법


DBHelper.class

class DBHelper(context: Context?): SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {

    companion object {
        private const val DATABASE_VERSION = 1
        private const val DATABASE_NAME = "myTestDB.db"
        private const val TABLE_NAME ="my_table"

        //테이블 컬럼
        private const val ID = "id" //order: 0
        private const val TITLE = "title" //order: 1

        private const val TEST = "TEST_LOG"
    }

    override fun onCreate(db: SQLiteDatabase?) {
        //테이블 생성 쿼리 작성 my_table(ID, TITLE)
        val CREATE_TABLE = "CREATE TABLE if not exists $TABLE_NAME (" +
                "$ID INTEGER PRIMARY KEY," +
                "$TITLE TEXT);"

        db?.let {
            val result = it.execSQL(CREATE_TABLE) //쿼리 실행
            if(it.isOpen){ //DB가 열려있으면
                //it.close() //DB를 닫는다.
            }
            Log.d(TEST, result.toString())
        }
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        //새 버전의 DB가 존재하면, 기존의 테이블은 삭제한다.
        db?.execSQL("DROP TABLE IF EXISTS $TABLE_NAME")
        onCreate(db) //다시 새 테이블을 생성한다.
    }

    fun insert(title: String){
        //쓰기모드로 데이터베이스를 가져온다.
        val db = this.writableDatabase

        //테이블에 Insert할 값을 설정한다. put(컬럼이름, 데이터)
        val values = ContentValues().apply { put(TITLE, title) }

        val result = db.insert(TABLE_NAME, null, values)
        //db.close() //db를 닫는다.
        Log.d(TEST, result.toString())
    }

    fun select(): ArrayList<String> {
        //읽기모드로 데이터베이스를 가져온다.
        val db = this.readableDatabase
        val query = "SELECT * FROM $TABLE_NAME"

        val cursor = db.rawQuery(query, null) //모든 값이 반환되지는 않고, 커서 형태로 값이 반환된다.
        //db.close() //db를 닫는다.
        val result = ArrayList<String>()

        //컬럼0: ID, 컬럼1: Title
        with(cursor) {
            while (moveToNext()){ //Cursor를 움직이면서 값을 하나씩 빼와야 한다.
                result.add(getString(1)) //컬럼1: Title 의 값만 계속 빼와서 result에 넣는다.
            }
        }

        return result
    }

    fun update(title: String, update: String) {
        val db = this.writableDatabase
        val values = ContentValues().apply { put(TITLE, update) } //업데이트할 컬럼과 값을 설정한다.

        val whereClause = "$TITLE LIKE ?" //쿼리의 Where 절을 설정한다.
        val whereArgs = arrayOf(title) //Where 절의 ?에 들어갈 args 들

        val count = db.update(TABLE_NAME, values, whereClause, whereArgs)
        //db.close() //db를 닫는다.
        Log.d(TEST, count.toString())
    }

    fun delete(title: String) {
        val db = this.writableDatabase

        val whereClause = "$TITLE LIKE ?" //쿼리의 Where 절을 설정한다.
        val whereArgs = arrayOf<String>(title) //Where 절의 ?에 들어갈 args 들

        //테이블의 해당 값을 삭제한다.
        val count = db.delete(TABLE_NAME, whereClause, whereArgs)
        //db.close() //db를 닫는다.
        Log.d(TEST, count.toString())
    }
}

activity.java