笔记:ROOM实现简单数据库

截图:

描述:

主界面包含四个按钮,分别实现;添加数据、删除数据、修改数据、查询数据。

引入依赖后,创建三个类:Dao、Entity、Database。

代码:

1.build.gradle.kt

//省略默认代码,只需新加
plugins {
    id("kotlin-android")
    id("kotlin-kapt")
}
dependencies {
    implementation("androidx.room:room-runtime:2.6.1")
    kapt("androidx.room:room-compiler:2.6.1")
    implementation("androidx.room:room-ktx:2.6.1")
}

2.MyEntity.kt

package com.example.database

import androidx.room.Entity
import androidx.room.PrimaryKey

//Entity 。用于定义封装实际数据的实体类,每个实体类都会在数据库中有一张对应的表
@Entity
data class MyEntity(
    @PrimaryKey(autoGenerate = true)
    var id: Int,
    var name: String,
    var age: Int)

3.MyDao.kt

package com.example.database

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update

//Dao是数据访问对象的意思,通常会在这里对数据库的各项操作进行封装,在实际 编程的时候,逻辑层就不需要和底层数据库打交道了,直接和Dao层进行交互即可。
@Dao
interface MyDao {
    @Insert
    fun insertUser(user: MyEntity)
    @Update
    fun updateUser(newUser: MyEntity)
    @Query("select * from MyEntity")
    fun loadAllUsers(): List<MyEntity>
    @Query("select * from MyEntity where age = :age")
    fun loadUsersOlder(age: Int): List<MyEntity>
    @Delete
    fun deleteUser(user: MyEntity)
    @Query("delete from MyEntity where name = :name")
    fun deleteUserByName(name: String): Int
}

4.MyDatabase.kt

package com.example.database

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase


//用于定义数据库中的关键信息,包括数据库的版本号、包含哪些实体类以及提 供Dao层的访问实例。
@Database(version = 1, entities = [MyEntity::class], exportSchema=false)
abstract class MyDatabase : RoomDatabase(){
    abstract fun myDao(): MyDao
    companion object{
        private var instance: MyDatabase? = null
        @Synchronized
        fun getDatabase(context: Context): MyDatabase{
            instance?.let {
                return it
            }
            return Room.databaseBuilder(
                context.applicationContext,
                MyDatabase::class.java,
                "my_database.db")
                .build().apply {
                    instance = this
                }
        }

    }
}

5.MainActivity.kt

package com.example.database
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import kotlin.concurrent.thread

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        val textView = findViewById<TextView>(R.id.textView)
        val but_add = findViewById<Button>(R.id.but_add)
        val but_delete = findViewById<Button>(R.id.but_delete)
        val but_update = findViewById<TextView>(R.id.but_update)
        val but_query = findViewById<TextView>(R.id.but_query)
        val user1 = MyEntity(1, "张三", 16)
        val user2 = MyEntity(2, "李四", 17)
        val user3 = MyEntity(3, "王二", 18)
        val user4 = MyEntity(4, "赵六", 19)
        val user5 = MyEntity(5, "胡一", 20)
        val myDao = MyDatabase.getDatabase(this).myDao()
        but_add.setOnClickListener {
            thread {
                myDao.insertUser(user1)
                myDao.insertUser(user2)
                myDao.insertUser(user3)
                myDao.insertUser(user4)
                myDao.insertUser(user5)
            }
        }
        but_delete.setOnClickListener {
            thread {
                myDao.deleteUserByName("王二")
            }
        }
        but_update.setOnClickListener {
            thread {
                user1.age = 20
                myDao.updateUser(user1)
            }
        }
        but_query.setOnClickListener {
            thread {
                for(user in myDao.loadAllUsers()){
                    Log.d("MainActivity", user.toString())
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值