【06】Kotlin项目实操之Room数据库

本文详细介绍了Kotlin项目中使用Room数据库进行流畅的SQLite操作,包括数据表实体定义、数据库访问对象(DAO)设计以及数据库的创建与获取。通过注解简化了增删改查操作,并展示了完整的案例代码,帮助读者深入理解如何在Android应用中高效管理本地数据。
摘要由CSDN通过智能技术生成

(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)好好活就是做有意义的事情.
(8)亡羊补牢,为时未晚
(9)科技领域,没有捷径与投机取巧。
(10)有实力,一年365天都是应聘的旺季,没实力,天天都是应聘的淡季。
(11)基础不牢,地动天摇
(12)写博客初心:成长自己,辅助他人。当某一天离开人世,希望博客中的思想还能帮人指引方向.
(13)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

【06】Kotlin项目实操之Room数据库

1.Room

(1)是SQlite数据库的抽象
(2)为了更加流畅的访问SQLite数据库

1.1如何做到流畅

(1)只需要使用注解即可以完成增删改查
(2)生成增删改查代码,它所生成的代码是在编译期完成的。
(3)生成的代码做了很多的优化
(4)使用了事务控制

2.案例

2.1数据表实体

/**
 * @author XiongJie
 * @version appVer
 * @Package com.gdc.kotlinproject.database
 * @file
 * @Description:
 * (1)@Entity注解在编译期生成代码
 * @date 2021-6-4 15:15
 * @since appVer
 */
@Entity
class Student() {
    /**
     * 主键唯一并自增
     */
    @PrimaryKey(autoGenerate = true)
    var id : Int = 0

    /**
     * 1.懒加载
     * 2.字段别名,如果不使用别名,默认使用属性名,加了别名,优先级更高,就使用别名的名称
     * name="Student_name"
     */
    @ColumnInfo(name = "name")
    lateinit var name:String

    @ColumnInfo(name = "age")
    var age:Int = 0

    /**
     * 1.次构造调用主构造
     * :this()
     */
    constructor(name:String,age:Int):this(){
        this.name = name
        this.age = age
    }
}

2.2数据库访问对象

/**
 * @author XiongJie
 * @version appVer
 * @Package com.gdc.kotlinproject.database
 * @file
 * @Description:
 * (1)@Dao标记数据库的访问对象,即数据库的增删改查
 * @date 2021-6-4 15:24
 * @since appVer
 */

@Dao
interface StudentDao {

    /**
     * 1.可变参数使用
     * vararg students:Student
     */
    @Insert
    fun insertStudents(vararg students:Student)

    @Update
    fun updateStudents(vararg students: Student)

    //1.删除全部
    @Query("DELETE FROM student")
    fun deleteAllStudents()

    //1.查询全部
    @Query("SELECT * FROM student ORDER BY ID DESC")
    fun queryAllStudents() : List<Student>

}

2.3数据库创建与获取

/**
 * 1.数据表与实体指定
 * java数组: entities = {}
 * kt数组:entities = []
 *
 * 2.数据库版本号设置
 * version数据库版本号
 *
 * 3.返回数据库操作Dao
 * Dao是对数据库的增删改查
 *
 * 4.创建数据库与获取数据库
 *
 * 5.需要成为RoomDatabase的子类
 *
 */
@Database(entities = [Student::class],version = 1)
abstract class StudentDatabase : RoomDatabase(){

    abstract fun getStudentDao() : StudentDao

    //派生(单例模式)
    companion object{
        //1.允许为空
        private var INSTANCE : StudentDatabase ? = null

        /**
         * 2.创建数据库获取数据库
         * (1)给Application使用
         */
        fun getDatabase(context : Context) : StudentDatabase ? {
            if(null == INSTANCE){
                /**
                 * 2.1::class.java是因为room底层是由java产现的,因此需要.java
                 * 如果底层是由kotlin语言编写的,就不需要这么麻烦
                 *
                 * 2.2允许在主线程中运行
                 * allowMainThreadQueries()
                 */
                INSTANCE = Room.databaseBuilder(context,StudentDatabase::class.java,"student_database.db")
                    .allowMainThreadQueries()
                    .build()

            }
            return INSTANCE
        }

        /**
         * 获取数据库
         */
        fun getDataBase() : StudentDatabase? = INSTANCE
    }

}

3.打赏鼓励

感谢您的细心阅读,您的鼓励是我写作的不竭动力!!!

3.1微信打赏

在这里插入图片描述

3.2支付宝打赏

在这里插入图片描述

Kotlin 是一种运行在 JVM 上的静态类型编程语言,它兼容 Java 代码,也被设计用于 Android 开发。Room 是一个数据库持久化库,它是 Android Architecture Components 的一部分,提供了更加便捷的方式来访问 SQLite 数据库。在 Kotlin 中使用 Room 数据库进行数据持久化,通常包括以下几个步骤: 1. 定义实体(Entity):通过注解来定义数据库中的表。例如,使用 `@Entity` 注解来标记一个类表示数据库中的一个表。 2. 创建数据库访问对象(DAO):使用注解定义访问数据库的方法。例如,使用 `@Dao` 注解标记一个接口或抽象类,并在其中定义对数据库进行增删改查(CRUD)操作的方法。 3. 定义数据库(Database):创建一个抽象类并使用 `@Database` 注解来标记,该注解需要包含数据库版本号和所有实体类列表。这个类还需要提供 DAO 的访问接口。 4. 配置数据库构建器:在应用的模块级 build.gradle 文件中添加 Room 运行时库依赖,并使用 `@Database` 注解的抽象类实例化一个 Room 数据库对象。 下面是一个简单的示例来说明这个过程: ```kotlin // 1. 定义实体类 @Entity data class User( @PrimaryKey val id: Int, @ColumnInfo(name = "first_name") val firstName: String?, @ColumnInfo(name = "last_name") val lastName: String? ) // 2. 创建 DAO @Dao interface UserDao { @Insert suspend fun insertUser(user: User) @Query("SELECT * FROM user") fun getAllUsers(): Flow<List<User>> } // 3. 定义数据库 @Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao } // 4. 在应用中配置 Room val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "database-name" ).build() ``` 在上述代码中,`User` 是一个实体类,它代表了数据库中的一个表。`UserDao` 是一个 DAO 接口,其中包含了对用户表进行操作的方法。`AppDatabase` 是数据库的抽象类定义,它继承自 `RoomDatabase`,并提供了访问 DAO 的方法。最后,我们使用 `Room.databaseBuilder()` 创建了数据库实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值