我想檢查一個SQLite數據庫的大小,如果它太大,它會通知用戶停止插入數據到它。如何有效地檢查/限制sqlite數據庫的大小?
但我怎麼能有效地檢查行的總數或數據庫的文件大小?最好有一些O(1)方法,以便我可以檢查用戶提交的每個插入。
我正在使用Qt,主要是針對Windows。
我想檢查一個SQLite數據庫的大小,如果它太大,它會通知用戶停止插入數據到它。如何有效地檢查/限制sqlite數據庫的大小?
但我怎麼能有效地檢查行的總數或數據庫的文件大小?最好有一些O(1)方法,以便我可以檢查用戶提交的每個插入。
我正在使用Qt,主要是針對Windows。
您可以簡單地檢查數據庫文件和關聯日誌的大小。這將是O(1),因爲系統調用的次數將始終相同。這樣的事情:
if (QFileInfo(dbFilePath).size() + QFileInfo(dbFilePath + "-journal").size() > maxSize) {
// Prevent insertion
}
對不起,但這是什麼「-journal」部分? – Nyaruko
@Nyaruko,SQLite在數據庫文件旁邊創建一個日誌文件來存儲事務。該文件的名稱只是最後附加的db文件+「-journal」的名稱。所以如果你的文件是mydb.sqlite,這個日誌將是mydb.sqlite-journal –
我相當肯定'select [count](*)from [table]'被優化到某個常量時間,而不是實際遍歷所有行。這足夠嗎? – Cameron
請記住,SQLite數據庫通常會無界限地增長,除非您現在仔細抽空它們:http://sqlite.org/lang_vacuum.html – MrEricSir