반응형
Notice
Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- OZViewer
- firebase-storage
- 워치
- NoSuchMethodError
- socket-server
- mqtt
- google-login
- cloud-firestore
- Dva
- AWS
- socket-client
- Flavors
- mosquitto
- ActivityResult-API
- 오즈뷰어
- JNI
- Firebase
- gradle
- Java8
- socket.io
- hung-up
- Android
- ozd
- firebase-database
- Galaxy Watch
- git
- Kotlin
- git-push
- TIZEN
- BottomSheetDialog
Archives
- Today
- Total
Hyeyeon blog
[Android] Kotlin - Room Database 본문
반응형
1. Dependecy 설정
implementation "android.arch.persistence.room:runtime:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version"
testImplementation "android.arch.persistence.room:testing:$room_version"
2. Entity [링크]
- Room에서 사용할 Entity Class생성
- tableName : 사용할 테이블 명 지정
- @PrimaryKey: 해당 필드를 기본키로 설정
- autoGenerate: autoIncrement 설정
- @ColumnInfo: 해당 필드의 테이블 컬럼명 지정(미지정 시 해당 필드와 동일한 이름으로 컬럼 생성)
- indices = [Index(value = ["테이블 컬럼명"], unique = true)]: 해당 컬럼에 unique 설정
@Entity(tableName = "history", indices = [Index(value = ["word"], unique = true)])
class SearchKeyword(@ColumnInfo("word") val keyword: String) {
@PrimaryKey(autoGenerate = true)
var id: Long = 0
}
3. Dao [링크]
- @Query/@Insert/@Delete/@Update: 해당 메소드의 동작 지정
- onConflict = OnConflictStrategy.REPLACE/ABORT/FAIL/IGNORE/ROLLBACK: 기본키 충돌 시, 처리 방식 설정 [링크]
- 모든 쿼리는 분리된 스레드에서 실행
interface BaseDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertEntity(vararg entity: T)
@Delete
fun deleteEntity(vararg entity: T)
}
@Dao
interface SearchKeywordDao : BaseDao {
@Query("SELECT * FROM history ORDER BY id DESC LIMIT 5")
fun selectAllHistories(): List
@Query("SELECT * FROM history WHERE id = :id ")
fun selectHistory(id: Long): List
}
4. Database
- 데이터베이스 생성은 비용이 많이 들어가기 때문에 싱글톤으로 작성
val roomDB = Room.databaseBuilder(context.applicationContext, 데이터베이스_클래스::class.java, "데이터베이스_명.db").fallbackToDestructiveMigration().build()
@Database(entities = [SearchKeyword::class], version = 1)
abstract class SearchKeywordDB : RoomDatabase() {
abstract fun dao(): SearchKeywordDao
companion object {
fun getInstance(context: Context): SearchKeywordDB {
return Room.databaseBuilder(context.applicationContext, SearchKeywordDB::class.java, "search.db").fallbackToDestructiveMigration().build()
}
}
}
5. Usage
val searchKeywordDB = SearchKeywordDB.getInstance(this)
val list = searchKeywordDB.dao().selectAllHistories()
[참고]
728x90
'개발 > Android' 카테고리의 다른 글
[Android] databinding으로 1000단위 콤마(,) 표시 (0) | 2019.06.22 |
---|---|
[Android] MotionLayout (0) | 2019.03.21 |
[Android] Recyclerview.Adapter notifyItemChanged 애니메이션 제거 (0) | 2019.03.12 |
[Android] 둥근 모서리 레이아웃 적용하기 (0) | 2019.02.15 |
[Android] Kotlin - SMS Retriever API (0) | 2019.02.15 |
Comments