2011-03-01 50 views
18

我有一個關於在Android中處理SQLite數據庫連接的(希望)快速的問題。我有一個應用程序,自然是由幾個活動組成的。我沒有創建/更新/查詢數據庫的麻煩,因爲我創建了一個單一的專用類來處理通過SQLiteOpenHelper的工作等。在Android中管理SQLite連接

我的問題是這樣的:因爲這些活動都共享同一個數據庫,這通常作爲單個靜態成員實現,還是每個活動都應該擁有自己的連接?我當然關心的是在每項活動中重新連接到數據庫的成本。

或者換句話說,有什麼理由不僅僅存儲一個單例實例嗎?

我也想知道是否有類似於.NET的連接池幕後發生的事情,以降低打開連接的成本。

在此先感謝!

回答

13

SQLite中的連接開放大約爲0.2ms。

最佳實踐告訴我們每次需要打開和關閉連接。

+0

謝謝!有時候找到一個「官方」的最佳做法是一個挑戰。 – 2011-03-01 19:13:49

9

只需使用SQLiteOpenHelper.getReadableDatabase()SQLiteOpenHelper.getWriteableDatabase() - Android將管理和緩存連接,因此您不需要。

其實指的是谷歌官方Using Databases文檔:

寫入和從 數據庫中讀取,分別叫getWritableDatabase() 和getReadableDatabase(), 。這兩個返回一個 SQLite數據庫

+0

感謝您的回覆@RivieraKid。官方文件並沒有詳細討論開放連接的費用,這是我提出這個問題的地方。知道在幕後管理/重用連接有一些措施,並且在我需要這些方法時調用這些方法的成本是可以接受的(而不是保留返回的數據庫對象)非常有幫助。 – 2011-03-01 19:12:31

+1

但是我應該每次調用這些函數時關閉返回的SQLiteDatabase? 我有一個SQLiteDatabase有很多小函數,每個都調用其中一個「getXXXDatabase」。我應該在每種方法結束時關閉數據庫嗎?我不會失去緩存優勢嗎?還是Android保持它呢? – 2016-02-25 17:15:50