gradle
//数据库
kapt 'androidx.room:room-compiler:2.4.0-alpha03'
implementation 'androidx.room:room-ktx:2.4.0-alpha03'
implementation 'androidx.room:room-runtime:2.4.0-alpha03'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
application
class Myapplication: Application() {
override fun onCreate() {
super.onCreate()
RoomDatabaseManager.instance.init(applicationContext)
}
}
RoomDatabaseManager
class RoomDatabaseManager {
private val DB_NAME = "errorLog"
private val MIGRATIONS = arrayOf(Migration1_2)
lateinit var db:AppDatabase
/**
* 数据库版本 1->2
*/
private object Migration1_2 : Migration(1,2){
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("alter table err_log add column user_id INTEGER NOT NULL DEFAULT 0")
}
}
companion object{
@JvmStatic
val instance:RoomDatabaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED){RoomDatabaseManager()}
}
/**
* @param context Context
*/
fun init(context: Context){
db = Room.databaseBuilder(context,AppDatabase::class.java,DB_NAME)
.addCallback(object: RoomDatabase.Callback(){
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
}
})
.addMigrations(*MIGRATIONS)
.build()
}
}
RoomDatabase
@Database(entities = [ErrLogBean::class], version = 2/** 原来1改为2 **/,exportSchema = false)
abstract class AppDatabase : RoomDatabase(){
abstract fun errLogDbDao(): ErrLogDbDao
}
Dao
@Dao
interface ErrLogDbDao {
@Update
fun update(vararg errLog: ErrLogBean)
@Delete
fun delete(errLog:ErrLogBean)
@Insert
fun insert(errLog:ErrLogBean):Long
@Query("delete from err_log where err_id > 0")
fun deleteAll()
@Query("select * from err_log")
fun findAll():List<ErrLogBean>
}
Entity
@Entity(tableName = "err_log")
data class ErrLogBean(
/** 错误码*/
@ColumnInfo(name = "err_code")
var errCode:String,
/** 错误描述*/
@ColumnInfo(name = "err_str")
var errStr:String,
/** 报错时间*/
var time:Long,
/** 用户id 后面新增的属性 **/
@ColumnInfo(name = "user_id", defaultValue = "0")
var userID:Long
){
/** 错误记录id(自增)*/
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "err_id")
var errId:Long = 0L
}
ViewModel
class UserViewModel : ViewModel() {
fun myclick(view: View) {
when (view.id) {
R.id.tv_addroom -> {
addErrorDao()
}
R.id.tv_findroom -> {
findErrorDao()
}
else -> {
}
}
}
fun addErrorDao() {
viewModelScope.launch {
withContext(Dispatchers.IO) {
var errorLog = ErrLogBean("1", "我是1号", 100,1)
RoomDatabaseManager.instance.db.errLogDbDao().insert(errorLog)
}
}
}
var arrorlist:List<ErrLogBean>?=null
fun findErrorDao() {
viewModelScope.launch {
withContext(Dispatchers.IO) {
RoomDatabaseManager.instance.db.errLogDbDao().deleteAll()
arrorlist = RoomDatabaseManager.instance.db.errLogDbDao().findAll()
for (list in arrorlist!!){
Log.d("****"," errId=${list.errId} errCode=${list.errCode} errStr=${list.errStr} userID=${list.userID}")
}
}
}
}
}