0

我知道这个问题有不同的版本,但我无法明确回答什么是解决我的问题的最佳方法。

我正在做的是在 SD 卡上创建一个 SQLite 数据库。我希望能够从中查询并写入它。

我的问题是卸载 SD 卡时最好的管理方法是什么。我完全可以像普通 MP3 播放器一样关闭我的应用程序。但是,我想确保对数据库的任何写入操作都不会部分完成。

我的一个想法是使用beginTransaction,将其标记为成功,然后调用end transaction。我的问题是如果没有调用事务结束会发生什么。这可能会导致数据损坏吗?另外,我需要一点帮助来了解要听什么或连接到什么来获得 SD 卡被卸载的通知。

谢谢

4

1 回答 1

1

这是数据库中事务的伟大之处——您几乎不需要担心:

“SQLite 中单个事务中的所有更改要么完全发生,要么根本不发生,即使将更改写入磁盘的行为被中断

程序崩溃、操作系统崩溃或电源故障。”

取自http://www.sqlite.org/transactional.html

在将数据写入磁盘时,数据库所在的要移除的磁盘应该(在最坏的情况下)表现得像电源故障一样。数据库将在下次启动时丢弃该数据。

因此,只要使用 commit 或 end transaction 提交事务并且执行语句的方法调用返回所有数据都已存储。否则,您的交易中的任何数据都不会被存储 - 这两种情况都会让您处于一致的状态。

当心唯一的问题:您需要确保需要一起执行(即原子地)的所有语句都必须在一个事务中!

于 2012-05-09T20:15:07.603 回答