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(安卓)Gradle Plugin指南(三)——依赖关系、android库和多
  2. androidの获取android手机信息
  3. ADT Bundle最后一次更新的版本下载地址
  4. Android(安卓)Gradle版本问题
  5. 如何隐藏Android4.0及以上版本的ActionBar、NotificationBar、St
  6. android studio 降低项目版本错误,no resource found
  7. Android软件更新
  8. javascript获取Android设备版本信息(备忘)
  9. SDK/ADT历史版本

随机推荐

  1. Android实验九之天气预报
  2. Android带参数链接请求服务器
  3. 源码网站推荐
  4. android 文件搜索
  5. Android传感器API:近距离感应Proximity
  6. Android(安卓)自定义View (一)
  7. ffmpeg compile with neon support for a
  8. android bitmap(图片)旋转90度
  9. android实现截屏
  10. Android自动判定输入的是电话号码还是网