DB 사용하기
- 앱 그래들 추가
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
}
라이브러리(defendencies)
kapt "androidx.room:room-compiler:2.2.6"
implementation "androidx.room:room-runtime:2.2.6"
- DB 엔티티 모델(테이블) 선언
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class History(
@PrimaryKey val uid: Int?,
@ColumnInfo(name = "expression") val expression: String?,
@ColumnInfo(name = "result") val result: String?
)
- 테이블 조작 방식 정의(인터페이스)
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import fastcampus.aop.part2.chapter4.model.History
@Dao
interface HistoryDao {
@Query("SELECT * FROM history")
fun getAll(): List<History>
@Insert
fun insertHistory(history: History)
@Query("DELETE FROM history")
fun deleteAll()
@Delete
fun delete(history: History)
@Query("SELECT * FROM history Where result LIKE :result LIMIT 1")
fun findByResult(result: String):History
}
- 실제 클래스로써 이용할 수 있게 추상 클래스로 생성
import androidx.room.Database
import androidx.room.RoomDatabase
import fastcampus.aop.part2.chapter4.dao.HistoryDao
import fastcampus.aop.part2.chapter4.model.History
@Database(entities = [History::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun historyDao(): HistoryDao
}
- 사용
선언
lateinit var db: AppDatabase
onCreate
db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java,
"historyDB"
).build()
DB 조작
Thread(Runnable {
db.historyDao().insertHistory(History(null, expressionText, resultText))
}).start()
Thread(Runnable {
db.historyDao().getAll().reversed().forEach {
runOnUiThread {
val historyView = LayoutInflater.from(this).inflate(R.layout.history_row, null, false)
historyView.findViewById<TextView>(R.id.expressionTextView).text = it.expression
historyView.findViewById<TextView>(R.id.resultTextView).text = "= ${it.result}"
historyLinearLayout.addView(historyView)
}
}
}).start()