sqlite - 回滚到快照

时间:2016-07-06 03:12:56

标签: android ios sqlite

我正在为androidios开发一个应用程序。我希望能够对sqlite数据库进行快照,并且可以在多次提交后回滚到该快照。任何时候都只需要一个快照。

数据必须在应用重新启动时保留,因此SAVEPOINT不是一个选项(它只存在于一个连接中)

这可能与Android和ios上的sqlite一起使用吗?如果没有,是否有一个具有此功能的数据库解决方案?

3 个答案:

答案 0 :(得分:1)

鉴于你在原帖中说了很多提交“之后的”,我担心你必须提到SQLite 的概念(比如每个 - 其他SQL数据库......)最不幸的是不直接支持。您将需要在自己的应用程序中实现“某些特定于应用程序”

而且,不幸的是,“你必须从这里接受它。” SQL理解通过“提交”或“回滚”结束的“原子事务”,但它不会理解更多

为了实现您的目标,您必须深入研究IBM曾称之为“检查点/重启”的(特定于应用程序的)领域。但是,最不幸的是,这些完全“特定于应用程序!”

答案 1 :(得分:1)

SQLite没有内置机制来还原已提交的事务。

理论上,您可以使用backup API制作数据库文件的副本,但在实践中,Android框架不允许您访问此文件。 如果您可以确保没有人访问数据库,您可以手动复制数据库文件。

如果更改量与整个数据库的大小相比较小,则最好记录所有更改,并在需要时手动还原它们。 这最好使用触发器完成;见Automatic Undo/Redo Using SQLite

答案 2 :(得分:-1)

您必须设置交易,如果成功则必须提交该交易,否则您必须取消该交易。

下面是示例代码

  

启动交易

database.beginTransaction(); /* for start transaction */
  

完成对数据库的操作后,您可以使用

database.setTransactionSuccessful();    
database.endTransaction();
  

但是如果你在交易之间给出错误

然后不要设置database.setTransactionSuccessful(); 以便事务回滚。

这是简单的步骤。 http://www.sqlite.org/lockingv3.html