java - 房间数据库 - 编辑实体
问题描述
我有个问题。我从这里编辑了我的房间实体:
@Entity(tableName = "users")
public class User {
public User(String username, String email, String password){
this.username = username;
this.email = email;
this.password = password;
}
public User() {}
@PrimaryKey
@ColumnInfo(name = "Username")
private String username;
@ColumnInfo(name = "Email")
private String email;
@ColumnInfo(name = "Password")
private String password;
//getters setters
到这个表格:
@Entity(tableName = "users")
public class User {
public User(String username, String email, String password){
this.username = username;
this.email = email;
this.password = password;
}
public User() {}
//changes here, move userId to int instead of username
@NonNull
@PrimaryKey(autoGenerate = true)
private int id;
@NonNull
@ColumnInfo(name = "Username")
private String username;
@ColumnInfo(name = "Email")
private String email;
@ColumnInfo(name = "Password")
private String password;
//getters setters.
这就是我的RoomDatabase
班级的样子:
@Database(entities = {User.class}, version = 1)
public abstract class ApplicationDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
我的问题是,当我编辑实体时,我的 android 设备中的数据库是否发生了变化?如果我的数据库中有数据怎么办?如果我需要先在我的设备上删除数据库?我的用户构造函数怎么样,它现在可以工作了吗?
感谢您的任何建议
解决方案
当您编辑实体时,您需要更改数据库的版本,在这种情况下,将注释更改为 @Database(entities = {User.class}, version = 2)
由您决定是要删除数据库的旧数据还是要将旧版本迁移到较新的版本(如果您有用户群并且不希望他们丢失他们的用户群,我建议您这样做)将数据保存在数据库中,否则我建议您删除旧数据库中的信息,因为它是更简单的解决方案)。
如果您想进一步了解迁移房间数据库的信息,我添加了一个链接:
https://developer.android.com/training/data-storage/room/migrating-db-versions
推荐阅读
- javascript - Angular 使用深度嵌套的 json 创建响应式表单
- python - np.block 不能将 (1,2) 数组与 (1,1) 数组连接在同一行
- c - TAIL递归计算谐波级数?
- c# - C# Selenium - 无头浏览器
- javascript - Promise 仅返回已解析的值
- javascript - 用于角度服务注入的未定义“this”实例
- android - Boardcast 接收器在 Android for Flutter 项目中不起作用
- javascript - 如果可以在“仪表”标签上设置标记?
- c# - 使用 JSInterop 调用实例方法 - 使用 JS 在输入字段更改时通知 Blazor
- crashlytics - Crashlytics/Fabric - 删除帐户/项目后我的应用程序会崩溃吗?