2009-12-15 205 views
4

我剛剛開始使用SQLite,我想將所有應用程序數據寫入文件,不知道文件是否已經存在;與'普通'文件,這是很簡單,但SQLite我不能創建一個表,如果它已經存在,並且我不能插入一行,如果主鍵已經存在。如何覆蓋SQLite文件的內容

我基本上想做類似「CREATE TABLE IF NOT EXISTS table .... else ... DELETE FROM table」。必須有辦法做到這一點,我懷疑有些方法比其他方法更有效率。例如,您會認爲使用現有表而不是刪除和重新創建會更好,但這取決於檢查它是否存在並刪除其內容。

另外,有沒有辦法將數據庫寫入內存(sqlite3_open(「:memory:」,db)),但然後獲取其內容 - 作爲字節數組或什麼 - 寫入文件?

回答

7

對於所有數據庫系統來說,首先刪除表然後重新創建它幾乎總是更高效。使用DELETE將需要索引更新等,而簡單的DROP也會刪除索引,並且不會涉及創建事務日誌條目對於SQLite,您可以執行DROP IF EXISTS條件刪除表。

1

如何在某處準備一個空的,設計完全的數據庫文件呢?那麼,如果預期的應用程序數據數據庫不存在,請通過複製空白數據庫文件來創建它?

1

如果您要在寫回應用程序數據之前(例如用戶設置)讀取應用程序數據,您將知道數據是否存在。儘量裹在異常處理表調用和如果存在的話,你就會知道 - 或者使用數據庫表來告訴你什麼存在:

SELECT name FROM sqlite_master 
WHERE type='table' 
ORDER BY name; 

如果你只有每隻想覆蓋現有的數據庫文件,你可以很容易地從磁盤上刪除數據庫文件,然後運行你的創建代碼 - 簡單 - 不用在任何地方拖放調用。不用擔心在版本之間更改數據庫。