본문 바로가기
IT/kotlin

Android 로컬 SQLite 이용하기

by 가능성1g 2025. 5. 30.
반응형

Android 기본 SDK 에 이미 SQLite 가 포함되어 있기 때문에, 바로 사용이 가능하다!

( 별도 디펜던시 필요가 없다! )

 

package kr.samdogs.simpledatabaseapplication

import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper

// SQLiteOpenHelper 를 상속 받는다. 사용할 db 명 지정
class SimpleDataSource(context: Context) : SQLiteOpenHelper(context, "contact.db", null, 1) {
    // 첫 실행시 테이블 생성 ( 생성되어 있으면 생성안하는듯? )
    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL(
            "CREATE TABLE contact (" +
                    "id CHAR(8) PRIMARY KEY, " +
                    "phone_number VARCHAR(64) NOT NULL, " +
                    "name VARCHAR(64) NOT NULL, "+
                    "email VARCHAR(64) "+
            ")"
        )
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        TODO("Not yet implemented")
    }

    //데이터베이스를 사용할떄 읽기인지 쓰기인지 선언해서 사용!
    fun getFriends(): List<Friend> {
        val db = this.readableDatabase
        val projection = arrayOf("id", "phone_number", "name", "email")
        val sortOrder = "id DESC"
        val cursor = db.query("contact", projection, null, null, null, null, sortOrder)
        val friends = mutableListOf<Friend>()
        with(cursor) {
            while(moveToNext()) {
                val friend = Friend(
                    id = getString(getColumnIndexOrThrow("id")),
                    phoneNumber = getString(getColumnIndexOrThrow("phone_number")),
                    name = getString(getColumnIndexOrThrow("name")),
                    email = getString(getColumnIndexOrThrow("email"))
                )
                friends.add(friend)
            }
        }
        cursor.close()

        return friends
    }

    fun addFriend(friend: Friend) {
        val db = this.writableDatabase
        val values = ContentValues().apply {
            put("id", friend.id)
            put("phone_number", friend.phoneNumber)
            put("name", friend.name)
            put("email", friend.email)
        }
        db.insert("contact", null, values)
    }

    fun removeFriend(friendId: String) {
        val db = this.writableDatabase
        val selection= "id = ?"
        val selectionArgs = arrayOf(friendId)
        db.delete("contact", selection, selectionArgs)
    }
}

 

샘플에서 사용한 VO 클래스

package kr.samdogs.simpledatabaseapplication

data class Friend(val id: String, val phoneNumber: String, val name: String, val email: String?)
반응형