Android使用Room数据库框架

364 阅读2分钟

Android使用Room数据库框架

room框架是jetpack里的一个框架,它简化了很多数据库操作,配合kotlin很简单几句代码就能完成增删改查的操作,以下步骤只针对kotlon语言

首先要导入kotlin:

//在build.gradle中添加kotlin 和注解
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'//这是kotlin的注解 类型与java APT

//再添加room框架
implementation 'androidx.room:room-ktx:2.2.1'
kapt "androidx.room:room-compiler:2.2.1"

一、新建bean文件

1、新建userBean.kt类,使用@Entity(tableName = "user")标注,tableName表示数据库表的名称

12.png

2、参数的注解主要使用到@PrimaryKey、@ColumnInfo、@Ignore:

@Primarykey 标注主键 autoGenerate参数表示是否自增长 @ColumnInfo 标注参数 name表示数据库名称 defaultValue表示默认参数;如果不添加这个注解框架会使用变量字段作为数据库字段 @Ignore 标注不需要添加到数据库表的字段

@Entity(tableName = "user")
data class UserBean (

    @PrimaryKey(autoGenerate = true) var id: Int,
    @ColumnInfo(name = "user_name" ,defaultValue = "wzl") var userName: String,
    @ColumnInfo(name = "address") var mAddress: String,
    @Ignore var sex:Int


)

二、添加Dao文件

1、Dao文件是个interface,添加@Dao注解表示这个用来操作数据库的增删改查

@Insert 插入数据库注解 @Query 查询数据库注解,在Query注解中可以写操作数据库代码,例如:@Query("select * FROM user WHERE id = :id"),不一定是查询的代码,修改删除的都可以写 @Delete 删除数据库一条记录 @Update 修改数据库数据

@Dao
interface UserDao {

    @Insert
    fun  insertUser(user: User): Long

    @Query("select * FROM user WHERE id = :id")
    fun queryUser(id: Int):User

    @Query("select * from user")
    fun queryAllUser(): Array<User>

    @Delete
    fun deleteUser(user: User) //这里不能使用id做为参数,不然编译会报错

    @Update
    fun updateUser(user: User)


}

三、继承RoomDatabase类

1、添加@Database注解 一般使用到两个参数entities和version,entities是个数组,传的你所创建Bean的类型,也就是你要创建的数据库表,version是表示数据库版本,版本更新的需要

@Database(entities = [User::class,GroupBean::class,BillBean::class,DeviceBean::class,AreaBean::class],version = 1)
abstract class UserDataBase : RoomDatabase() {

}

2、使用单例初始化DataBase类

 companion object{

        private var instance: UserDataBase? = null


        fun getInstance(context: Context): UserDataBase{
            if (instance == null){
                instance = Room.databaseBuilder(
                    context.applicationContext,
                    UserDataBase::class.java,
                    "mUser.db").allowMainThreadQueries().build()

            }
            return instance as UserDataBase
        }

    }

3、添加Dao类的使用接口

	abstract fun userDao() : UserDao
    abstract fun groupDao(): GroupDao
    abstract fun billDao(): BillDao
    abstract fun deviceDao(): DeviceDao
    abstract fun areaDao(): AreaDao

完整代码

@Database(entities = [User::class,GroupBean::class,BillBean::class,DeviceBean::class,AreaBean::class],version = 1)
abstract class UserDataBase : RoomDatabase() {

    abstract fun userDao() : UserDao
    abstract fun groupDao(): GroupDao
    abstract fun billDao(): BillDao
    abstract fun deviceDao(): DeviceDao
    abstract fun areaDao(): AreaDao


    companion object{

        private var instance: UserDataBase? = null


        fun getInstance(context: Context): UserDataBase{
            if (instance == null){
                instance = Room.databaseBuilder(
                    context.applicationContext,
                    UserDataBase::class.java,
                    "mUser.db").allowMainThreadQueries().build()

            }
            return instance as UserDataBase
        }

    }
}

使用

使用就很简单,用DataBase的单例活动到Dao对象,然后使用增删改查的方法就行

val deviceDao = UserDataBase.getInstance(this).deviceDao()
deviceDao.insertDevice(deviceBean)