Android

[안드로이드] SQLite 사용법(Kotlin)

codeandcoffee 2024. 6. 7. 21:13

1. SQLite 소개

SQLite는 안드로이드 애플리케이션 내에 경량의 데이터베이스를 내장하여 사용할 수 있게 해줍니다. 주로 로컬 데이터를 저장하고 관리하는 데 사용됩니다.

2. SQLiteOpenHelper 클래스 생성

SQLiteOpenHelper는 데이터베이스를 생성하고 관리하는 데 도움이 되는 안드로이드의 기본 클래스입니다. 데이터베이스를 생성하고 스키마를 관리하기 위해 이 클래스를 상속받아야 합니다.

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

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

    companion object {
        private const val DATABASE_NAME = "example.db"
        private const val DATABASE_VERSION = 1

        // 테이블 생성 SQL 문
        private const val TABLE_CREATE =
                "CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER);"
    }

    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL(TABLE_CREATE)
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        db.execSQL("DROP TABLE IF EXISTS users")
        onCreate(db)
    }
}

3. 데이터 삽입

데이터베이스에 데이터를 삽입하는 방법입니다. SQLiteDatabase 객체의 insert 메서드를 사용합니다.

import android.content.ContentValues

fun insertUser(name: String, age: Int) {
    val db = this.writableDatabase
    val values = ContentValues().apply {
        put("name", name)
        put("age", age)
    }
    
    db.insert("users", null, values)
    db.close()
}

4. 데이터 조회

데이터베이스에서 데이터를 조회하는 방법입니다. SQLiteDatabase 객체의 query 메서드를 사용합니다.

import android.database.Cursor

fun getAllUsers(): Cursor {
    val db = this.readableDatabase
    return db.query("users", null, null, null, null, null, null)
}

5. 데이터 업데이트

데이터베이스의 데이터를 업데이트하는 방법입니다. SQLiteDatabase 객체의 update 메서드를 사용합니다.

fun updateUser(id: Int, name: String, age: Int) {
    val db = this.writableDatabase
    val values = ContentValues().apply {
        put("name", name)
        put("age", age)
    }

    db.update("users", values, "id = ?", arrayOf(id.toString()))
    db.close()
}

6. 데이터 삭제

데이터베이스에서 데이터를 삭제하는 방법입니다. SQLiteDatabase 객체의 delete 메서드를 사용합니다.

fun deleteUser(id: Int) {
    val db = this.writableDatabase
    db.delete("users", "id = ?", arrayOf(id.toString()))
    db.close()
}

7. 전체 코드

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

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

    companion object {
        private const val DATABASE_NAME = "example.db"
        private const val DATABASE_VERSION = 1

        // 테이블 생성 SQL 문
        private const val TABLE_CREATE =
                "CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER);"
    }

    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL(TABLE_CREATE)
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        db.execSQL("DROP TABLE IF EXISTS users")
        onCreate(db)
    }

    fun insertUser(name: String, age: Int) {
        val db = this.writableDatabase
        val values = ContentValues().apply {
            put("name", name)
            put("age", age)
        }
        
        db.insert("users", null, values)
        db.close()
    }

    fun getAllUsers(): Cursor {
        val db = this.readableDatabase
        return db.query("users", null, null, null, null, null, null)
    }

    fun updateUser(id: Int, name: String, age: Int) {
        val db = this.writableDatabase
        val values = ContentValues().apply {
            put("name", name)
            put("age", age)
        }

        db.update("users", values, "id = ?", arrayOf(id.toString()))
        db.close()
    }

    fun deleteUser(id: Int) {
        val db = this.writableDatabase
        db.delete("users", "id = ?", arrayOf(id.toString()))
        db.close()
    }
}

결론

SQLiteOpenHelper 클래스를 사용하여 데이터베이스를 생성하고, 데이터를 삽입, 조회, 업데이트, 삭제하는 기본적인 CRUD 작업을 수행하는 방법을 배웠습니다. 이를 통해 로컬 데이터베이스를 활용하여 다양한 기능을 구현할 수 있습니다.