ROOM DB 사용법

quinones·2024년 4월 22일

오늘은 roomDB를 사용해서 검색기록을 남기는 방법에 대해 정리해보았다.

종속성 추가

app수준 gradle에 plugins{}안에 kotlin("kapt") 를 추가해주고,

//room DB
val roomVersion = "2.4.2"
implementation("androidx.room:room-runtime:$roomVersion")
kapt("androidx.room:room-compiler:$roomVersion")

위와같이 dependencies안에 추가해준다.

Entitiy 생성

@Entity(tableName = "searchHistoryEntity")
data class SearchHistoryEntity(
    @PrimaryKey(autoGenerate = true)
    val id: Int?,
    @ColumnInfo(name = "contents")
    val contents: String,
    @ColumnInfo(name = "date")
    val date: String,
)

Entitiy를 만들어준다. tableName을 원하는 테이블 이름으로 만들어준다.

여기서 기본키를 생성해야하는데 각 항목마다 id를 만들어주고 autoGenerate = true를 추가해줘서 id가 자동으로 만들어지게 했다.
나머지로 내용과 날짜를 만들어줬다.

Dao 생성

@Dao
interface SearchHistoryDao {
    @Insert
    fun insert(history: SearchHistoryEntity)

    @Delete
    fun delete(history: SearchHistoryEntity)

    @Query("SELECT * FROM searchHistoryEntity ORDER BY id DESC")
    fun getAllHistory(): MutableList<SearchHistoryEntity>

}

Dao 인터페이스를 생성해준다.
나는 삽입, 삭제, 불러오기 3가지 기능을 사용해서 만들어줬다.

AppDatabase 생성

@Database(entities = [SearchHistoryEntity::class], version = 1)
abstract class AppDatabase: RoomDatabase() {
    abstract fun searchHistoryDao(): SearchHistoryDao

    companion object{
        @Volatile
        private var INSTANCE: AppDatabase? = null
        fun getDatabase(context: Context): AppDatabase {
            if(INSTANCE == null){
                INSTANCE = Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java,
                    "app_database")
                    .allowMainThreadQueries()
                    .build()
            }
            return INSTANCE as AppDatabase
        }
    }
}

데이터베이스에서 사용할 DAO(Data Access Object)를 정의해준다. 여기서는 앞에서 만들어준 SearchHistoryDao를 사용해준다. INSTANCE 변수는 데이터베이스의 싱글톤 인스턴스를 저장해준다.

사용법

앱의 어디서든 사용할 수 있게 companion object 안에

lateinit var database: AppDatabase

이렇게 선언해주고

database = AppDatabase.getDatabase(this)

데이터베이스를 원하는 곳에서 초기화해준다.

val newSearchHistory = SearchHistoryEntity(null, contents = searchText, date = formattedDate)
database.searchHistoryDao().insert(newSearchHistory)

이렇게 해서 roomDB에 원하는 데이터를 insert시켜줄 수 있다. delete및 기타 원하는 Query들도 입맛에 맞게 수정해서 사용해주면 된다.



룸디비
room
Room
RoomDB

profile
이우진

0개의 댓글