Room學(xué)習(xí)三:創(chuàng)建視圖與訪問數(shù)據(jù)

前言

Room是對SQLite的封裝,官方推薦使用Room。該文檔來自google官方文檔。該文檔里的代碼是kotlin。

在數(shù)據(jù)庫中創(chuàng)建視圖

1. @DatabaseView創(chuàng)建視圖
@DatabaseView("SELECT user.id, user.name, user.departmentId," +
        "department.name AS departmentName FROM user " +
        "INNER JOIN department ON user.departmentId = department.id")
data class UserDetail(
    var id: Long,
    var name: String?,
    var departmentId: Long,
    var departmentName: String?
)
2. 關(guān)聯(lián)視圖
@Database(entities = arrayOf(User::class),
          views = arrayOf(UserDetail::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

訪問數(shù)據(jù)

1. 插入insert, onConflict屬性是沖突解決的策略
@Dao
interface MyDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertUsers(vararg users: User)

    @Insert
    fun insertBothUsers(user1: User, user2: User)

    @Insert
    fun insertUsersAndFriends(user: User, friends: List<User>)
}

也可以設(shè)置返回值為long 、long[] 或 List<Long>類型,返回的是插入第幾行

2.更新update
@Dao
interface MyDao {
    @Update
    fun updateUsers(vararg users: User)
}

也可以返回int,代表更新的哪一行

3. 刪除delete
@Dao
interface MyDao {
    @Delete
    fun deleteUsers(vararg users: User)
}

也可以返回int,代表被刪除的行數(shù)

4. sql語句 query
@Dao
interface MyDao {
    @Query("SELECT * FROM user")
    fun loadAllUsers(): Array<User>

   @Query("SELECT * FROM user WHERE age BETWEEN :minAge AND :maxAge")
    fun loadAllUsersBetweenAges(minAge: Int, maxAge: Int): Array<User>

    @Query("SELECT * FROM user WHERE first_name LIKE :search " +
           "OR last_name LIKE :search")
    fun findUserWithName(search: String): List<User>

     @Query("SELECT first_name, last_name FROM user WHERE region IN (:regions)")
     fun loadUsersFromRegions(regions: List<String>): List<NameTuple>
}

當(dāng)然,返回值也可以是lIveData

@Dao
interface MyDao {
    @Query("SELECT first_name, last_name FROM user WHERE region IN (:regions)")
    fun loadUsersFromRegionsSync(regions: List<String>): LiveData<List<User>>
}

也可以返回RxJava2類型

dependencies {
    implementation 'androidx.room:room-rxjava2:2.1.0-alpha02'
}
@Dao
interface MyDao {
    @Query("SELECT * from user where id = :id LIMIT 1")
    fun loadUserById(id: Int): Flowable<User>

    // 返回添加到數(shù)據(jù)庫的數(shù)量
    @Insert
    fun insertLargeNumberOfUsers(users: List<User>): Maybe<Int>

    // 確保操作成功完成
    @Insert
    fun insertLargeNumberOfUsers(varargs users: User): Completable

    //返回刪除的數(shù)量
    @Delete
    fun deleteAllUsers(users: List<User>): Single<Int>
}

返回的是一個類呢?

@Dao
interface MyDao {
    @Query(
        "SELECT user.name AS userName, pet.name AS petName " +
        "FROM user, pet " +
        "WHERE user.id = pet.user_id"
    )
    fun loadUserAndPetNames(): LiveData<List<UserPet>>
}
    data class UserPet(var userName: String?, var petName: String?)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容