[Android] SQLite(Structured Query Language)

이도연·2024년 1월 29일
0

android studio

목록 보기
24/28

Android에서 SQLite는 경량의 관계형 데이터베이스 관리 시스템(RDBMS)이다.
안드로이드 애플리케이션에서 내부 데이터 저장 및 관리에 주로 사용된다.
SQLite는 서버 없이 로컬에서 사용할 수 있으며, 주로 구조화된 데이터를 저장하고 검색하기 위한 목적으로 사용된다.

1. SQLiteOpenHelper 클래스

안드로이드에서 SQLite를 사용하기 위해 SQLiteOpenHelper 클래스를 사용한다.
SQLiteOpenHelper 클래스를 상속하여 데이터베이스를 생성하고 열기, 업그레이드 등의 작업을 수행한다.

// DB 헬퍼 클래스 정의
class DatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {

    companion object {
    	// DB 정보
        const val DATABASE_NAME = "mydatabase"
        const val DATABASE_VERSION = 1
        
        // 테이블 및 열 이름
        const val TABLE_NAME = "contacts"
        const val COLUMN_ID = "_id"
        const val COLUMN_NAME = "name"
        const val COLUMN_PHONE = "phone"
    }

	// DB 생성 시 호출되는 메서드
    override fun onCreate(db: SQLiteDatabase) {
    	// 유저 정보를 저장하는 테이블 생성 쿼리
        val createTableQuery = "CREATE TABLE $TABLE_NAME (" +
                "$COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "$COLUMN_NAME TEXT, " +
                "$COLUMN_PHONE TEXT)"
        db.execSQL(createTableQuery)
    }
	
    // DB 업그레이드 시 호출되는 메서드
    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
    	// 기존 테이블 삭제 후 새로 생성(단순화된 방법, 실제 프로덕션 코드에서는 데이터 이전 등을 고려)
        db.execSQL("DROP TABLE IF EXISTS $TABLE_NAME")
        onCreate(db)
    }
}

2. 데이터베이스 생성 및 열기

SQLiteOpenHelper를 사용하여 데이터베이스를 생성하고 열 수 있다.

데이터베이스가 없는 경우에는 onCreate() 메서드에서 새로운 데이터베이스를 만들고, 데이터베이스가 이미 존재하는 경우 onUpgrade() 메서드에서 업그레이드를 수행한다.

// DB 작업 관리 클래스 정의
class DatabaseManager(context: Context) {

    private val dbHelper: DatabaseHelper = DatabaseHelper(context)
    private val db: SQLiteDatabase = dbHelper.writableDatabase

	// DB 닫기
    fun closeDatabase() {
        db.close()
    }
}

3. 데이터 추가

데이터를 추가하는 함수를 작성한다.

// 데이터 추가
fun addContact(name: String, phone: String) {
    val values = ContentValues().apply {
        put(DatabaseHelper.COLUMN_NAME, name)
        put(DatabaseHelper.COLUMN_PHONE, phone)
    }

    db.insert(DatabaseHelper.TABLE_NAME, null, values)
}

4. 데이터 조회

데이터를 조회하는 함수를 작성한다.

// 모든 데이터 조회
fun getAllContacts(): List<Contact> {
    val contacts = mutableListOf<Contact>()
    val cursor: Cursor = db.query(
        DatabaseHelper.TABLE_NAME,
        arrayOf(DatabaseHelper.COLUMN_ID, DatabaseHelper.COLUMN_NAME, DatabaseHelper.COLUMN_PHONE),
        null,
        null,
        null,
        null,
        null
    )

    while (cursor.moveToNext()) {
        val id = cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_ID))
        val name = cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_NAME))
        val phone = cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_PHONE))

        contacts.add(Contact(id, name, phone))
    }

    cursor.close()
    return contacts
}

5. 데이터 클래스 정의

data class Contact(val id: Int, val name: String, val phone: String)
...




예제 사용

val databaseManager = DatabaseManager(context)

// 데이터 추가
databaseManager.addContact("John Doe", "123-456-7890")

// 데이터 조회
val contacts = databaseManager.getAllContacts()
for (contact in contacts) {
    println("${contact.id}: ${contact.name} - ${contact.phone}")
}

databaseManager.closeDatabase()

0개의 댓글