赞
踩
1、引入依赖,在app文件夹下的build.gradle中的dependencies中引入依赖,注意添加id 'kotlin-kapt', kapt是必要的,不添加会报错。
- plugins {
- id 'com.android.application'
- id 'org.jetbrains.kotlin.android'
- id 'kotlin-kapt'
- }
- implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
- implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
- implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0'
-
- def room_version = "2.5.0"
-
- implementation "androidx.room:room-runtime:$room_version"
- kapt "androidx.room:room-compiler:$room_version"
- implementation("androidx.room:room-rxjava2:$room_version")
-
- // optional - RxJava3 support for Room
- implementation("androidx.room:room-rxjava3:$room_version")
-
- // optional - Guava support for Room, including Optional and ListenableFuture
- implementation("androidx.room:room-guava:$room_version")
-
- // optional - Test helpers
- testImplementation("androidx.room:room-testing:$room_version")
-
- // optional - Paging 3 Integration
- implementation("androidx.room:room-paging:$room_version")
2、@Entity,使用Room定义一个数据实体User(带Entity注解的类),一个Entity表由主键和一个或多个列组成,User中的每个实例都代表着User表中的一行,tableName后面为表名,在不指定表名的情况下,默认将类名作为数据表的名称。Room默认使用字段名称作为列名称,如需更改,采用@ColumnInfo注解设置name属性(列名)。
- /**
- * @PrimaryKey(autoGenerate = true)表示主键自增,参数autoGenerate表示主键可以由数据库自动生成
- * @ColumnInfo(name = "id")表示列的名字为id
- * @Ignore表示会忽略这个字段,不进行记录
- */
- @Entity(tableName = "user")
- data class User(
- @PrimaryKey(autoGenerate = true)
- @ColumnInfo(name = "id")
- var id: Int = 0,
-
- @ColumnInfo(name = "userNum")
- val userNum: String,
- @ColumnInfo(name = "userPwd")
- val userPwd: String? = null,
- @ColumnInfo(name = "sex")
- val sex: String? = null,
- @ColumnInfo(name = "age")
- val age: Int ,
- @ColumnInfo(name = "school")
- val school: String? = null,
- )
3、@Dao,使用@Dao注解定义为一个BaseDao接口,增加基本的插入、删除、修改方法,再定义一个UserDao去扩展BaseDao接口,增加需要的方法。
- @Dao
- interface BaseDao<T> {
- @Insert
- fun insert(bean: T)
-
- @Insert
- fun insertAll(bean: T)
-
- @Delete
- fun delete(bean:T)
-
- @Update
- fun update(bean: T)
-
- }
- @Dao
- interface UserDao : BaseDao<User> {
-
- @Query("select * from user where userNum = :userNum")
- fun getByNum(userNum: String): User?
-
- /**
- * 查询表里所有数据
- */
- @Query("select * from user")
- fun getAllUser(): User?
-
- /**
- * 根据字段删除记录
- */
- @Query("delete from user where userNum = :userNum")
- fun deleteByNum(userNum: String)
-
-
- /**
- * 修改指定用户的密码
- */
- @Query("update user set userPwd =:userPwd where userNum =:userNum")
- fun updatePwd(userNum: String, userPwd: String)
-
- }
4、@DataBase,定义用户保存数据库的MyDataBase类,定义数据库配置。@DateBase类需满足如下条件:
- @Database(
- entities = [User::class],
- version = 1,
- exportSchema = false
- )
- abstract class MyDataBase : RoomDatabase() {
-
- abstract fun userDao(): UserDao
-
-
- companion object {
- val instance = Room.databaseBuilder(appContext, MyDataBase::class.java, "chat_db").build()
- }
- }
5、在MainActivity中进行调用
- import androidx.appcompat.app.AppCompatActivity
- import android.os.Bundle
- import androidx.lifecycle.lifecycleScope
- import kotlinx.coroutines.Dispatchers
- import kotlinx.coroutines.launch
-
- class MainActivity : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- insertData()
- updateData()
- deleteData()
- queryData()
- }
-
- /**
- * 插入一条数据
- */
- private fun insertData() {
- lifecycleScope.launch(Dispatchers.IO) {
- MyDataBase.instance.userDao().insert(
- User(
- userNum = "GSHD",
- userPwd = "1231343",
- sex = "女",
- age = 18,
- school = "XXXXX"
- )
- )
- }
- }
-
- /**
- * 查询 userNum = "GSHD" 的记录
- */
- private fun queryData() {
- lifecycleScope.launch(Dispatchers.IO) {
- MyDataBase.instance.userDao().getByNum(
- userNum = "GSHD"
- )
- }
- }
-
- /**
- * 修改 userNum = "GSHD" 的userPwd
- */
- private fun updateData() {
- lifecycleScope.launch(Dispatchers.IO) {
- MyDataBase.instance.userDao().updatePwd(
- userNum = "GSHD",
- userPwd = "111111",
- )
- }
- }
-
- /**
- * 删除 userNum = "GSHD" 的数据
- */
- private fun deleteData() {
- lifecycleScope.launch(Dispatchers.IO) {
- MyDataBase.instance.userDao().deleteByNum(userNum = "GSHD")
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。