我正在使用带有ORMLite的H2Database。我们有60个表都使用ORMLite创建"如果不存在则创建",现在我们将提供一个主要版本,并且要求是更新旧版本数据库。但是我需要知道如何使用ormLite来执行此操作,因为在新版本中一些表将是新的,一些是现有旧表,并且有一些修改,例如我们在先前版本db中有一个作业表,在此版本中我们添加了2个列并更改一列的数据类型。有什么建议。我已经看过一些关于Android版SqlLite的OrmLite的帖子。如何将此方法用于其他数据库。像这篇文章 ORMLite update of the database
答案 0 :(得分:1)
但我需要知道如何使用ormLite执行此操作,因为在新版本中某些表将是新的,有些是现有的旧表,并且有一些修改,例如我们在以前的版本db中有一个作业表,在此版本中我们添加了再增加2列并更改一列的数据类型。
我不确定这里有什么简单的答案。 ORMLite不直接提供任何魔术功能,使数据迁移更容易。然而,这里有一些想法:
您需要使用某种SQL逻辑来确定您的应用程序是否安装了“旧”或“新”架构。您可以使用原始SQL来查找特定表或列的存在。可能是一个好主意继续存储一个元数据库版本的元表,Android免费获得。
您可以为每个实体(OldAccount
与Account
)创建新旧版本,并使用@DatabaseTable(tableName = "accounts")
将它们映射到同一个表格。然后,您可以使用oldAccountDao.iterator()
读取旧实体,将它们转换为新实体,并且(只要您不使用主键)使用新的accountDao.update(...)
更新它们。
您可以肯定会提出一系列需要按正确顺序执行的SQL语句来更改架构。然后按顺序调用dao.exectuteRaw(...)
。
显然,只会创建新实体。
您可能需要考虑在转换过程之前的某个位置转储所有表的备份文件,并在出现故障时告知用户,以便用户可以恢复并运行旧版本的应用程序。
希望这里有所帮助。