1

可以在我的模型更改数据库之前保存表中的数据吗?

例如,我重命名一列并且不会丢失数据。因此,即我想从列 c1 中获取所有数据,将列重命名为 c2 并将所有数据写回。

4

2 回答 2

3

这是ORMLite 文档中的一句话:“您不能重命名或删除列或更改约束”。

所以你的选择是:

  1. 保持现状,
  2. 添加一个新列,将所有数据从旧列复制到新列,作为升级的一部分,完全忽略旧列,或者
  3. 使用删除/创建策略进行升级:将表中的数据备份到临时表中,删除表,根据需要重新创建,将所有数据复制回其中,最后删除临时表桌子。

数据库升级总是令人紧张的事情(需要大量错误处理、大量测试),坦率地说,如果名称是您唯一关心的事情,我会不理会它(选项 1)。如果您确实需要更改它,那么选项 2 风险较低,但会留下一个“死”列和数据。例如,如果数据占整个数据库大小的很大比例,则选项 3 可能是您的选择。

于 2013-06-11T14:43:40.610 回答
0

我想从 c1 列中获取所有数据,将我的列重命名为 c2 并将所有数据写回。

Sqlite 不支持重命名列,因此这在 Android 下不起作用。但是,您当然可以添加一个额外的列。在 Android/ORMLite 下有一些关于架构更改的好文档。请参阅此页面:

http://ormlite.com/docs/upgrade-schema

例如,您可以执行以下架构更新:

dao.executeRaw(
    "ALTER TABLE `account` ADD COLUMN hasDog BOOLEAN DEFAULT 0;");
dao.updateRaw("UPDATE `account` SET hasDog = 1 WHERE dogCount > 0;");
于 2013-06-11T14:25:14.373 回答