Android studio如何使用数据库room
时间: 2025-01-03 21:24:16 浏览: 7
### 使用 Room 数据库进行 CRUD 操作
#### 创建实体类 (Entity)
为了定义数据库中的表,需要创建一个 Java 或 Kotlin 类来表示该表。这个类应该被 `@Entity` 注解标记。
```java
@Entity(tableName = "users")
public class User {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "first_name")
private String firstName;
@ColumnInfo(name = "last_name")
private String lastName;
// Getters and Setters...
}
```
此代码片段展示了如何声明一个名为 users 的表及其字段[^4]。
#### 定义数据访问对象 (DAO)
DAO 是用于定义方法从而对数据库执行增删改查操作的接口或抽象类。
```java
@Dao
public interface UserDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(User user);
@Delete
void delete(User user);
@Update
void update(User user);
@Query("SELECT * FROM users WHERE first_name LIKE :name LIMIT 1")
User findByName(String name);
}
```
上述 DAO 接口提供了基本的数据存取功能,并通过 SQL 查询语句实现了自定义查找逻辑。
#### 构建数据库实例
接下来要构建一个继承自 `RoomDatabase` 的抽象类作为整个应用唯一的一个数据库连接点。
```java
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
```
这里指定了所含有的实体以及版本号;每当修改了 schema 后都需要更新版本以便触发迁移机制。
#### 获取全局唯一的数据库实例
通常会采用单例模式来管理数据库实例化过程:
```java
private static volatile AppDatabase INSTANCE;
private static final Object LOCK = new Object();
public static AppDatabase getInstance(Context context) {
if (INSTANCE == null) {
synchronized (LOCK) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(
context.getApplicationContext(),
AppDatabase.class,
"database-name"
).build();
}
}
}
return INSTANCE;
}
```
这段静态工厂方法确保在整个应用程序生命周期内只存在一份打开着的数据库文件副本。
#### 执行异步任务
考虑到 SQLite 不支持多线程并发写入,在主线程上调用任何可能阻塞的操作都是不允许的。因此建议利用 Repository 层配合协程或其他形式后台调度器完成实际 I/O 工作。
```kotlin
class UserRepository(private val userDao: UserDao) {
suspend fun addUser(user: User){
withContext(Dispatchers.IO){
userDao.insert(user)
}
}
// Other methods like deleteUser(), updateUser() etc.
}
```
以上就是关于怎样在 Android Studio 中借助 Room 库来进行持久层编程的大致介绍。
阅读全文