Room是Android官方提供的sqlite数据库管理组件。

添加依赖

apply plugin: 'com.android.application'apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-extensions'apply plugin: 'kotlin-kapt'android {    ...    defaultConfig {        ...        javaCompileOptions {            annotationProcessorOptions {                arguments = ["room.schemaLocation": "$projectDir/build/room/schemas".toString()]            }        }    }    ...}dependencies {    ...    def room_version = "1.1.1"    implementation "android.arch.persistence.room:runtime:$room_version"    kapt "android.arch.persistence.room:compiler:$room_version"     implementation "android.arch.persistence.room:rxjava2:$room_version"    implementation "android.arch.persistence.room:guava:$room_version"    testImplementation "android.arch.persistence.room:testing:$room_version"}

创建数据库

val accountDB: AccountDB = Room.databaseBuilder(context, AccountDB::class.java, "account.db")            .allowMainThreadQueries()//允许在主线程查询(如果不允许主线程查询,可以使用LiveData)            .fallbackToDestructiveMigration()//数据库版本更新,清空数据库            .addMigrations(migration_1_2)//数据库版本更新,修改数据库            .build()
@Database(entities = [User::class, Phone::class], version = 1)abstract class AccountDB : RoomDatabase() {    abstract fun userDao(): UserDao    abstract fun phoneDao(): PhoneDao}

定义实体表

@Entity(tableName = "user")class User {    @PrimaryKey(autoGenerate = true)    @ColumnInfo(name = "id")    var id: Long = 0    @ColumnInfo(name = "nickname")    var nickname: String = ""    @ColumnInfo(name = "birthday")    var birthday: Long = 0    @Ignore    var picture: Bitmap? = null}
@Entity(tableName = "phone")class Phone {    @PrimaryKey(autoGenerate = true)    @ColumnInfo(name = "id")    var id: Long = 0    @ColumnInfo(name = "num")    var num: String = ""    @ColumnInfo(name = "userId")    var userId: Long = 0}

Dao类

@Daointerface UserDao {    @Query("SELECT * FROM user")    fun query(): List    @Query("SELECT * FROM user")    fun queryLiveData(): LiveData>    @Query("SELECT * FROM user WHERE id IN (:userIds)")    fun queryByIds(vararg userIds: Int): List    @Query("SELECT * FROM user WHERE nickname LIKE :nickname")    fun queryByNickname(nickname: String): List    @Insert    fun insert(user: User):Long    @Update    fun update(user: User):Int    @Delete    fun delete(user: User):Int    @Transaction    @Query("SELECT * FROM user")    fun queryUserAndPhone(): List}
@Daointerface PhoneDao {    @Insert    fun insert(phone: Phone):Long}

数据库查询

val accountDB = Room.databaseBuilder(App.context, AccountDB::class.java, "account.db")    .allowMainThreadQueries()    .build()val user = User()accountDB.userDao().insert(user)//新增accountDB.userDao().query()//查询accountDB.userDao().update(user)//修改accountDB.userDao().delete(user)//删除

事务处理

val accountDB = Room.databaseBuilder(App.context, AccountDB::class.java, "account.db")    .allowMainThreadQueries()    .build()try {    //执行事务    accountDB.runInTransaction {        val user = User()        //插入数据        DBUtil.accountDB.userDao().insert(user)        "a".toInt()//异常    }} catch (e: Exception) {    e.printStackTrace()    Toast.makeText(this, "异常,数据回滚", Toast.LENGTH_SHORT).show()}

LiveData查询

val accountDB = Room.databaseBuilder(App.context, AccountDB::class.java, "account.db")    .allowMainThreadQueries()    .build()accountDB.userDao().queryLiveData().observe(this, Observer {list->    log(list.toString())})

关联查询

class UserAndPhone {    @Embedded    var user: User = User()    @Relation(parentColumn = "id", entityColumn = "userId")    var phoneList: List = ArrayList()    override fun toString(): String {        return "UserAndPhone(user=$user, phoneList=$phoneList)"    }}
@Daointerface UserDao {    @Transaction    @Query("SELECT * FROM user")    fun queryUserAndPhone(): List}

数据库版本更新

val migration_1_2: Migration = object : Migration(1, 2) {    override fun migrate(database: SupportSQLiteDatabase) {        database.execSQL("ALTER TABLE user ADD birthday INTEGER NOT NULL DEFAULT 0")    }}val accountDB = Room.databaseBuilder(App.context, AccountDB::class.java, "account.db")    .allowMainThreadQueries()    .addMigrations(migration_1_2)    .build()

RoomDemo:https://github.com/dingjianlun/RoomDemo

更多相关文章

  1. android所有版本源码下载网站
  2. ADT Bundle最后一次更新的版本下载地址
  3. Android Gradle版本问题
  4. 如何隐藏Android4.0及以上版本的ActionBar、NotificationBar、St
  5. android studio 降低项目版本错误,no resource found
  6. javascript获取Android设备版本信息(备忘)
  7. SDK/ADT历史版本
  8. Android数据库操作的两种方式
  9. zxing项目源码解读(2.3.0版本,Android部分)

随机推荐

  1. Android(安卓)BLE连接问题笔记
  2. android 开发 View _1_ View的子类们 和
  3. Android(安卓)仿qq 点赞功能
  4. android 模拟back键
  5. Android优雅的控制用户点击按钮的频率
  6. ListView一些相关知识
  7. Android入门笔记 - 多媒体 - MediaPlayer
  8. 动画 -- View动画 -- 透明度动画
  9. React-Native Android(安卓)打包(window环
  10. Android之googleMap(其二)