2012-11-18 22 views
2

我目前正在爲我的Android應用程序的數據庫開發BackupHelper。方法Context.databaseList()報告屬於我的應用程序的所有數據庫的名稱。但我確實遇到了很多其他文件的主要SQLite數據庫文件旁邊(如):如何處理BackupHelper和SQLite附加文件

  • database.db
  • database.db期刊
  • database.db-SHM
  • database.db -wal

所有Android文檔都會告訴每個數據庫有單個數據庫文件,但是這些信息似乎已過時。

是否保存所有這些文件與BackupHelper?

在還原之後,SQLite是否可以在所有Android平臺上使用這些文件?

非常感謝提前。

回答

2

做了一些谷歌搜索,發現有關的其他文件的一些信息:

database.db期刊

SQLite的默認創建在事務的開始,這是一個日誌文件好東西。通常它會在提交時刪除文件。

您可以通過PRAGMA sql命令將此行爲更改爲簡單截斷文件(不需要創建/刪除)或將其歸零。並非所有選項都可以在您的SQLite版本上受支持。

PRAGMA journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | OFF 

寫操作通常不完成,直到你提交,這是由截斷,刪除或雜誌無效實施。

如果這種行爲是新的,我沒有解釋爲什麼它可能發生了變化,除了可能是SQLite的升級改變了默認行爲,或者由於沒有爲每個事務重新打開日誌而變得更加複雜。

Source

database.db-SHM database.db,沃爾瑪

這些SQLite創建的臨時文件。如果你手動刪除主分區,你應該刪除它們。從我可以收集的內容來看,WAL是回滾日誌的替代品,它使SQLite能夠在事務失敗時回滾更改。 SQLite如何使用它們以及爲什麼它們被存放了很長時間取決於SQLite的作者,但一般來說SQLite看起來非常穩定,所以我不會過多擔心它們。欲瞭解更多的信息在這裏看看:

http://www.sqlite.org/fileformat2.html#walindexformat

這些文件的SQLite 3.7的新功能。

Source

希望幫助...

+0

感謝。所以這是保存備份所有文件的模式「database.db *」,並在以後恢復它們? –

+0

我還沒有做過這樣的事情,所以我很確定,但它看起來像是用於未提交更改和回滾的臨時文件,因此您可以避免備份這些文件。我建議嘗試只備份'.db'文件,看看你是否可以只用這個文件恢復數據庫... –

+1

至少wal文件是必需的。幾個月前我與客戶進行過測試,因爲他無法看到備份數據庫中的所有條目。我們發現,wal不是傳統的日誌文件。相反,它只將提交的(!!!)條目附加到wal文件,並只在達到閾值/檢查點時纔將它們傳輸到主文件。我想我會備份我發現的所有東西... –