我正计划开始将一个现有的应用程序迁移到架构组件,我的一个疑问是我应该如何组织新的代码。
我有一些表被添加到个人库中,而个人库只包含在某些风格中,如果数据库类存在于主应用程序中,那么如何将这些实体和DAO添加到主应用程序中呢?
我应该添加另一个数据库类到库中吗?如果是这样,它不会与主应用程序中现有的数据库类冲突吗?
我一直在寻找,但还没有能够找到任何例子或教程...
编辑以阐明数据库问题
从文档中我了解到,在数据库抽象类中,你必须告诉哪些实体存在,并且还要为DAO创建访问方法。如果库中有实体,怎么做呢?
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
5条答案
按热度按时间wn9m85ua1#
如果您想更新房间数据库并添加表...只需添加另一个实体,然后更新版本,如果您添加另一个实体,如电影表...请执行以下操作
有关参考,您可以查看... this
mrwjdhj32#
Room持久化库通过Migration类支持增量迁移来满足这一需求。每个Migration子类定义了startVersion和endVersion之间的迁移路径。
因此,正确的答案(也是正确的方法,因为您不应该使用fallbackToDestructiveMigration)是:
将新表作为java类添加
更新数据库版本,在实体声明中添加实体(添加类定义以告诉room应该考虑该类),并添加dao getter
使用数据库构建器添加迁移sql脚本,如下所示
来源:https://developer.android.com/training/data-storage/room/migrating-db-versions
cl25kdpy3#
与Kotlin:
u0njafvf4#
找条捷径。
向房间数据库添加新表。
1)创建一个新的表-你可以通过创建一个带有@Entity(tableName =“user_data”)注解的java类来实现-在这个表中你将创建你想要的所有列/字段。
2)创建一个新的DAO(数据访问对象)-正如我们所知,我们有一个模型类(java)。我们持有它像一个对象,检索,所以,创建一个接口与注解@Dao -因为这将有所有的SQL查询语句,并作为一个中间(接口)之间的数据库,和您的命令。
3)添加您的新表到数据库-在这里要小心,如果你做错了,你可能会丢失数据,或者你的应用程序可能会崩溃。
首先,将您创建的表类添加到实体属性
@数据库(实体= {表一.类,用户数据.类},版本= 1)
第二个注意,我们不增加版本号从1到2,将解释你下面你,我们这样做。
第三,添加这个抽象方法,这样就可以根据需要在任何地方重写它。
公共抽象用户数据DAO getUserDataDao();
第四,这将是相同的,因为你以前与单表。
添加新表后,代码将如下所示
}
现在卸载应用程序,如果你已经安装在您的设备,因为我们没有迁移和更改,这就是为什么我没有增加版本.
现在,当你安装你的应用程序新鲜,它将处理与两个表。
第八,通过这样做在这个策略是不值得赞赏的,因为你的数据丢失.
第九,你需要迁移应用程序,通过增加版本号来改变版本号,然后编写一个静态方法来告知迁移。
check here
yws3nbqq5#
在Kotlin中你可以使用一个数组字面值。添加你的实体,就像在示例代码和更高的数据库版本中: