目标
介绍通过Google官方提供的Room库来进行SQLite数据库操作.本文会完成对一张用户表进行增/删/查操作.
效果图- 在app模块下build.gradle文件中添加依赖
//集成room进行SQLite数据库操作
implementation "androidx.room:room-runtime:2.2.5"
kapt "androidx.room:room-compiler:2.2.5"
//集成协程coroutines进行异步操作
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0"
- 创建数据类
/**
* 测试用的用户数据类,包含自动生成值的主键id字段,用户名字段。
*/
@Entity(tableName = "user_table")
class User(
@PrimaryKey(autoGenerate = true) var id: Int = 0,
@ColumnInfo(name = "user_name") var name: String = ""
)
- 创建数据库表操作类
/**
* 用户数据库表操作类
*/
@Dao
public interface UserDao {
//新增数据
@Insert
void add(User... users);
//删除所有数据
@Query("DELETE FROM USER_TABLE")
void deleteAll();
//查询出所有数据
@Query("SELECT * FROM USER_TABLE")
List query();
}
- 创建数据库类
/**
* 数据库类,用于创建数据库及对所有数据库表进行操作。
* 所有的数据库表类都放在entities里,通过逗号分隔;
* version表示当前的数据库版本号,如果应用发布后,又对数据库结构做了修改,则需要变更版本号(一般加1即可)
*/
@Database(entities = [User::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
//所有数据库表操作类都放在这里
abstract val userDao: UserDao
companion object {
//自定义数据库文件名,只要在应用内不存在多个同名的数据库文件即可。
private const val DATABASE_NAME = "demo_database"
@Volatile
private var instance: AppDatabase? = null
@Synchronized
fun getInstance(context: Context) =
instance ?: buildDatabase(context).also { instance = it }
private fun buildDatabase(context: Context) =
Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME).build()
}
}
- 调用数据库操作
- 在Activity界面布局文件(activity_main.xml)中添加几个按钮
- 在Activity中调用数据库操作
class MainActivity : AppCompatActivity() {
lateinit var userDao: UserDao
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
userDao = AppDatabase.getInstance(this).userDao
addDataBtn.setOnClickListener { addUser() }
delDataBtn.setOnClickListener { delUser() }
queryDataBtn.setOnClickListener { queryUser() }
}
private fun addUser() {
GlobalScope.launch(Dispatchers.IO) {
userDao.add(User(name = "张三"))
}
}
private fun delUser() {
GlobalScope.launch(Dispatchers.IO) {
userDao.deleteAll()
}
}
private fun queryUser() {
GlobalScope.launch(Dispatchers.IO) {
val dataList = userDao.query()
withContext(Dispatchers.Main)
{
toast("当前数量:" + dataList.size)
}
}
}
private fun toast(text: String) =
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}