Android room

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}")
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值