Android에서 SQLite는 경량의 관계형 데이터베이스 관리 시스템(RDBMS)이다.
안드로이드 애플리케이션에서 내부 데이터 저장 및 관리에 주로 사용된다.
SQLite는 서버 없이 로컬에서 사용할 수 있으며, 주로 구조화된 데이터를 저장하고 검색하기 위한 목적으로 사용된다.
안드로이드에서 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)
}
}
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()
}
}
데이터를 추가하는 함수를 작성한다.
// 데이터 추가
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)
}
데이터를 조회하는 함수를 작성한다.
// 모든 데이터 조회
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
}
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()