事务性重命名数据库文件.db和db-journal以及数据库共享

时间:2014-09-04 20:22:03

标签: android database android-sqlite sqlitemanager

我想重命名数据库文件。这些任务似乎很容易。

1)我关闭数据库2)重命名.db文件3)重命名.db-journal文件4)我打开数据库

然而,如果是前者将会发生什么。在步骤2之后和步骤3之前,系统将崩溃(我知道概率很低,但是......)?

我注意到有时在关闭数据库之后取决于Android版本.db-journal文件有0个大小(例如android 4.0.4),但有时它非常大(例如.db文件大小的50%)(ex .android 4.2.2)。如果size为0,我确定没有问题(在提到的场景中丢失.db文件可能不会导致任何丢失的数据)。但是当.db-jurnal文件非常庞大时,是否意味着在没有.db-journal的情况下打开.db文件(它将具有旧名称)会导致任何数据丢失?

有没有办法在一个“事务”中重命名两个文件(两者都重命名都没有)?

如果我想分享我的数据库怎么办(例如,我想通过电子邮件发送给我的朋友)?这是必须发送两个文件.db和.db-journal还是只发送.db文件就足够了?

1 个答案:

答案 0 :(得分:1)

回滚日志文件包含回滚事务所需的信息。

如果应用程序在事务处于活动状态时崩溃,则数据库将在下次打开数据库时自动执行回滚。

如果您已经打开了一个数据库(并且可能再次关闭它),并且没有活动事务,并且您的应用程序没有崩溃并且仍在运行,那么您就知道数据库文件处于一致状态并且您已经可以忽略日志文件。 (如果journal mode设置为DELETE,则不会有-journal个文件。)

(注意:在WAL mode中,您无法忽略-wal文件。)