【问题标题】:Update H2Database schema with ORMLite使用 ORMLite 更新 H2Database 架构
【发布时间】:2014-07-15 08:21:51
【问题描述】:

我正在使用带有 ORMLite 的 H2Database。我们有 60 个表都是用 ORMLite “如果不存在则创建”创建的,现在我们将提供一个主要版本,要求更新旧版本数据库。但是我需要知道如何使用 ormLite 来做到这一点,因为在新版本中,一些表将是新的,一些是现有的旧表并进行了一些修改,例如我们在以前的版本 db 中有一个工作表,在这个版本中,我们又添加了 2 个列并更改一列的数据类型。有什么建议么。我看过其他一些关于 OrmLite for Android SqlLite 的帖子。这种方法如何用于其他数据库。例如喜欢这个帖子 ORMLite update of the database

【问题讨论】:

    标签: h2 ormlite


    【解决方案1】:

    但是我需要知道如何使用 ormLite 来做到这一点,因为在新版本中,一些表将是新的,而一些是现有的旧表并进行了一些修改,例如我们在以前的版本 db 中有一个工作表,在这个版本中我们添加了再增加 2 列并更改一列的数据类型。

    我不确定这里有什么简单的答案。 ORMLite 没有直接提供任何神奇的功能来使数据迁移更容易。然而,这里有一些想法:

    • 您需要使用某种 SQL 逻辑来确定您的应用程序是否安装了“旧”或“新”架构。您可以使用原始 SQL 来查找特定表或列的存在。将来存储一个带有数据库版本的元表可能是一个好主意,Android 免费获得。

    • 您可以创建每个实体的新旧版本(OldAccountAccount)并将它们映射到带有 @DatabaseTable(tableName = "accounts") 的同一个表。然后,您可以使用oldAccountDao.iterator() 读取旧实体,将它们转换为新实体并(只要您不使用主键)使用新的accountDao.update(...) 更新它们。

    • 您可以确定需要以正确的顺序执行一系列 SQL 语句来更改架构。然后跟他们按顺序拨打dao.exectuteRaw(...)

    • 显然,新实体将刚刚创建。

    您可能需要考虑在转换过程之前将所有表的备份文件转储到某处,并在出现故障时告知用户,以便您的用户可以恢复并运行旧版本的应用程序。

    希望这里有一些有用的东西。

    【讨论】:

    • 我很欣赏你的想法,但我设法用老式的方式做到了这一点。我没有在 ORMLite 上找到任何足够的帮助。所以基本上我利用Java的JDBC API来确定DB的版本。然后我为相关的表制作了一个 SQL 更新脚本并在它上面运行。如果成功,那么我开始了实际的 ORMLite 连接。顺便谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2019-04-21
    • 2015-02-22
    相关资源
    最近更新 更多