android room 教程,android room 使用

引入依赖

def room_version = "2.2.5"

implementation "androidx.room:room-runtime:$room_version"

implementation "androidx.room:room-ktx:$room_version"

kapt "androidx.room:room-compiler:$room_version"

在android 配置中加入

apply plugin: 'kotlin-kapt' //kapt

android{

...

defaultConfig{

...//指定room.schemaLocation生成的文件路径

javaCompileOptions {

annotationProcessorOptions {

arguments= ["room.schemaLocation": "$projectDir/schemas".toString()]

}

}

}

...

定义相应的实体类

@Entity(tableName = "t_user")classUser {

@PrimaryKey

@NonNull

var id: String= ""var username: String? = nullvar name: String? = nullvar sex: Int? = nullvar pic: String? = nullvar area: String? = nullvar phone: String? = nullvar address: String? = nullvar disabled: Boolean? = nullvar delFlag: Boolean? = null}

字符串主键 一定要添加 @NonNull 注解

下面就是dao了

@DaointerfaceUserDao {

@Query("select * from t_user where id=:id limit 1")

fun get(id:String): User?@Query("select * from t_user where delFlag = false")

fun query():List

//插入或更新

@Insert(onConflict =OnConflictStrategy.REPLACE)

fun insertOrUpdate(user: User)

@Query("delete from t_user where id=:id")

fun delete(id: String)

}

然后就是database类

@Database(entities = [User::class, 其他定义的数据类...],version = 1,exportSchema = true)

@TypeConverters(DateConverter::class, BoolConverter::class)abstract classAppDatabase : RoomDatabase() {abstractfun userDao(): UserDao

...

}

@TypeConverters 这里使用了两个自定义的转换器 处理

1.数字转boolean

classBoolConverter {

@TypeConverter

fun revertDate(value: Number): Boolean {return value == 1}

@TypeConverter

fun converterDate(value: Boolean): Number {return if(value) 1 else 0}

}

2.毫秒数转日期

classDateConverter {

@TypeConverter

fun revertDate(value: Long): Date {returnDate(value)

}

@TypeConverter

fun converterDate(value: Date): Long {returnvalue.time

}

}

然后定义一个database帮助类

object AppDatabaseHelper {privatevar appDatabase: AppDatabase

init {//MyApp 是自定义application类

val appContext =MyApp.instance.applicationContext

appDatabase= Room.databaseBuilder(appContext, AppDatabase::class.java,"mydb")

.allowMainThreadQueries()

.fallbackToDestructiveMigration()//升级数据库版本 清空数据库//.addMigrations(MIGRATION_1_2,...) 可以自己定制数据库迁移

.build()//比如1版本升级2版本 消息表增加了一个字段msgId//val MIGRATION_1_2 = object :Migration(1,2){//override fun migrate(database: SupportSQLiteDatabase) {//database.execSQL("ALTER TABLE t_msg "//+ " ADD COLUMN msgId TEXT");//}//}

}

fun getInstance(): AppDatabase {returnappDatabase

}

}

最后是使用

private val userDao =AppDatabaseHelper.getInstance().userDao()//调用dao的各种方法就可以使用了//需要注意,不能再主线程使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值