Android架构组件Room的使用,androidview的事件分发

constructor(bookname: String?) {

this.name = bookname

}

}

表注解解释

1.如果想给一个表设置表名就在@Entity的后面添加(tableName = “book”),不是设置默认采用类名

2.声明表的主键 @PrimaryKey(autoGenerate = true)

3.更改表的属性列名@ColumnInfo(name

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

= “bookname”),默认类的字段名

1.定义Dao类

@Dao

interface BookDao {

@Insert

fun addBook(book : Book)

@Query(“SELECT * FROM book”)

fun loadAll(): List<Book?>?

@Query(“select * from book where name = :name”)

fun queryName(name : String) :List<Book?>?

@Delete

fun delete(song: Book?)

}

如果在query时返回值类型和查询的表名和返回值类型或查询的表名不相同时,在程序编译会编译失败,这也降低了程序在运行时出现的风险

2.定义数据库和生成数据类

@Database(entities = [Book::class], version = 1)

abstract class RoomDaoManager : RoomDatabase() {

abstract fun BookDao(): BookDao

companion object {

private val DATABASE_NAME = “dev_db.db”

private var databaseInstance: RoomDaoManager? = null

@Synchronized

open fun getInstance(): RoomDaoManager? {

if (databaseInstance == null) {

databaseInstance = Room

.databaseBuilder(

MyApplication.instance(),

RoomDaoManager::class.java,

DATABASE_NAME

)

.allowMainThreadQueries()

.build()

}

return databaseInstance

}

}

}

数据库升级

1.addMigrations(Migration migrations…):一个迁移可以处理多个版本

2.Migration(int startVersion, int endVersion):每次迁移都可以在定义的两个版本之间移动,初始版本和目标版本

3.在重写的migrate方法中执行更新的sql,同时需要在对应的Entity类中添加相同的字段,来保证字段相同

Room .databaseBuilder(

MyApplication.instance(),

RoomDaoManager::class.java,

DATABASE_NAME

)

.allowMainThreadQueries()

.addMigrations(MIGRATION_1_2)

.build()

###addMigrations(Migration migrations…):一个迁移可以处理多个版本

###Migration:每次迁移都可以在定义的两个版本之间移动

val MIGRATION_1_2 = object : Migration(1, 2) {

override fun migrate(database: SupportSQLiteDatabase) {

//对表增加一个字段

database.execSQL(“ALTER TABLE Book ADD COLUMN sn TEXT NOT NULL DEFAULT ‘’”)

}

}

LiveData和Room配合使用

//Livedata依赖

def lifecycle_version = “2.2.0”

implementation “androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version”

//返回值使用Livedata

@Query(“SELECT * FROM book where id = :id”)

fun queryLiveData(id : Int): LiveData<Book?>?

//通dao对象调用查询的方法

bookDao?.queryLiveData(1)?.observe(this, Observer {

Log.i(“book-query”,"${it?.name}")

})

Rxjava和Room配合使用

//Rxjava2和Rxjava3 可以选择使用

def room_version = “2.3.0”

// optional - RxJava2 support for Room

implementation “androidx.room:room-rxjava2:$room_version”

// optional - RxJava3 support for Room

implementation “androidx.room:room-rxjava3:$room_version”

//定义使用Rxjava的方法

@Query(“SELECT * FROM book where id = :id”)

fun queryFlowable(id : Int): Flowable<Book?>?

Room数据库注解

@Entity

@Dao

@Database

总结

Room没有隐藏SQLite的细节,而是试图通过提供方便的api来查询数据库,并在编译时验证这些查询。这允许您访问SQLite的全部功能,同时拥有Java SQL查询生成器提供的类型安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值