【问题标题】:SQLite can we use older version after updating with the new version?用新版本更新后我们可以使用旧版本的 SQLite 吗?
【发布时间】:2013-01-18 04:09:56
【问题描述】:

我有一个问题。已更新 SQLite 数据库。

将version编号1更新为2后,我的数据库更新为onUpgrade()。

1-我想知道,我是否可以使用旧数据库。

和onUpgrade() 我使用db.drop("previous table");

2-所以删除该表后,我是否可以从中获取数据。

请详细说明。

任何好的建议都会被接受。

已编辑:- 我们是否可以使用旧版本的数据库。

【问题讨论】:

  • 我想知道更新新版本后是否可以获取旧数据库

标签: android sqlite


【解决方案1】:

不,您在删除后 无法访问旧表中的任何内容 - 删除表就像删除操作一样 - 您不应该轻易重新获得对它的访问权限。从我的搜索引擎得到的第一个link:

删除表会删除表定义及其所有 行。

如果您仍然需要以前的数据,我建议您继续使用该数据库,并且在您觉得不再需要它之前不要删除它。 This SO answer详细介绍了如何正确升级表。需要注意的一件有趣的事情是,如果您决定使用ALTER TABLE:

SQLite 在 ALTER TABLE 命令上是受限,它允许添加和重命名 只有 no 删除/删除是通过重新创建表格来完成的。

所以有多种方法可以解决这个问题 - ALTER TABLE 很好,如果你有一个小东西要改变,你不必破坏一切,但如果你需要至少删除一列/行,你就是想要按照答案创建一个临时表。

【讨论】:

  • 如果我更改了该数据库的版本。它会丢失数据或者它会有
  • ok A-C 还有一件事什么是创建表的正确位置。
  • @Cobra 如果你升级版本号,它应该调用onUpgrade(),所以如果你放弃,你将无法访问数据,但是如果你改变,你仍然可以访问数据。 This SO 问题涉及很多细节。 编辑: 什么是创建表格的正确位置?您的数据库助手类有一些明确定义的方法。
  • @Cobra 没问题。我建议遵循我链接的 SO 答案 - 它比我的答案更详细。
  • AC 你能解释一下吗。我能不能得到旧版本的数据库......假设我有 upgrade1 和 upgrade1(新版本数据库)......所以我可以使用 upgrade1 与否。跨度>
【解决方案2】:

如果您想继续使用该表的数据,请不要删除它。改用 ALTER TABLE 语句来添加新字段。

【讨论】:

  • Gabe..我想知道创建表格的正确位置以及为什么只在那个位置......请解释并编辑您的答案。
  • 如果您使用的是 SQLiteOpenHelper,请在 onCreate 中创建表。在 onUpdate 中,您应该使用 ALTER TABLE 命令来添加或删除列并将旧模式更改为新模式。通过更改表而不是删除它,您可以将所有旧数据保留在其中。
【解决方案3】:

没有。您需要做的是获取数据的副本(在内存中或在另一个数据库中),重新创建您的数据库,然后写回数据。

当然,这仅在您需要删除一个或多个表以进行升级过程时。对于添加新列等简单情况,无需删除/重新创建表;因此简化了流程。

【讨论】:

  • 如何复制旧的数据库版本..有链接
  • 一种方法是将其读入内存。您也可以复制该文件。有很多关于如何复制文件的示例;用“sqlite android copy database”之类的东西用谷歌搜索。另一种方法是创建第二个数据库并将其用作临时存储。总而言之,如果数据库很小,读入内存是最好的方法。
猜你喜欢
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2023-03-03
相关资源
最近更新 更多