注意点:
1. gradle 中加入 'kotlin-kapt' 插件, 依赖加入
implementation "androidx.work:work-runtime:2.2.0" kapt "androidx.room:room-compiler:2.1.0"
2. 主activity 中用thread 执行。
package com.example.testroom
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
@Database(version = 3, entities = [User::class], exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
private val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("create table Book (id integer primary key autoincrement not null, name text not null, pages integer not null)")
}
}
private val MIGRATION_2_3 = object : Migration(2, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("alter table Book add column author text not null default 'unknown'")
}
}
private var instance: AppDatabase? = null
@Synchronized
fun getDatabase(context: Context): AppDatabase {
instance?.let {
return it
}
return Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, "app_database")
.build().apply {
instance = this
}
}
}
}
package com.example.testroom
import android.text.Editable
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class User(var firstName: String, var lastName: String, var age: Int ) {
@PrimaryKey(autoGenerate = true)
var id: Long = 0
}
package com.example.testroom
import androidx.room.*
@Dao
interface UserDao {
@Insert
fun insertUser(user: User): Long
@Update
fun updateUser(newUser: User)
@Query("select * from User")
fun loadAllUsers(): List<User>
@Query("select * from User where age > :age")
fun loadUsersOlderThan(age: Int): List<User>
@Delete
fun deleteUser(user: User)
@Query("delete from User where lastName = :lastName")
fun deleteUserByLastName(lastName: String): Int
@Query("delete from User where age = :age")
fun deleteByAge(age: Int)
@Query("delete from User ")
fun deleteAll()
}
package com.example.testroom
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*
import kotlin.concurrent.thread
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val userDao = AppDatabase.getDatabase(this).userDao()
add.setOnClickListener {
val user = User(tv_name.text.toString() ,tv_name.text.toString(),tv_age.text.toString().toInt())
thread {
userDao.insertUser(user)
}
}
clear.setOnClickListener {
thread {
userDao.deleteAll()
}
}
get.setOnClickListener {
thread {
for (user in userDao.loadAllUsers()) {
Log.d("ddd", user.toString())
}
}
}
bt_deletebyage.setOnClickListener {
thread {
userDao.deleteByAge(tv_age.text.toString().toInt())
}
}
}
}