截图:
描述:
主界面包含四个按钮,分别实现;添加数据、删除数据、修改数据、查询数据。
引入依赖后,创建三个类: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())
}
}
}
}
}