2011-07-06 21 views
19

我正在創建一個數據庫輔助類和一些其中的方法我只是查詢數據庫和其他我寫它。getWritableDatabase()VS getReadableDatabase()

我的理解是這兩種方法都會打開數據庫並讓程序只讀或寫入數據庫。

對於查詢語句,值得使用getReadableDatabase()還是兩者之間的性能差別很小。

謝謝你的時間。

+0

http://stackoverflow.com/questions/10844578/difference-between-getwritabledatabase-and-getreadabledatabase – user2864740

+0

https://youtu.be/jBjSb70yOMk –

回答

17

它們返回相同的對象,除非磁盤已滿或存在強制在只讀模式下打開數據庫的權限錯誤。這個名字有點混亂:)

作爲一個經驗法則,你應該在UI線程之外對這些方法進行任何調用。兩者都需要很長時間才能返回。

如果你不打算寫數據庫只使用getReadableDatabase,因爲它會有助於你的代碼的清晰度和意圖。

更多信息here

+0

因此即使我使用'getWritableDataBase',我也可以執行select語句嗎? –

-2

以只讀方式打開數據庫應該稍微提高性能,因爲鎖定開銷較低。

+4

這是不是真的。除非磁盤已滿或存在許可錯誤,否則對getReadableDatabase的調用大多數情況下都會返回可寫的數據庫對象。 – mgv

+2

所以基本上兩種方法在性能和使用方面沒有什麼不同。謝謝 –

+1

@JamesDudley除了getReadableDatabase *不*必須返回一個可寫的數據庫。 – user2864740

0

如果在實現併發(多線程)數據庫調用時出現'數據庫已鎖定'類型錯誤,請使用getWritableDatabase而不是getReadableDatabase。

1

如果您對數據庫執行的操作太多,例如查詢,以某種隨機順序頻繁更新,那麼使用getReadabledatabase並沒有任何意義,因爲它只能用於讀取值。

根據您的應用需求,您可以判斷使用情況。如果你只是不斷讀取值,那麼你可以去可讀數據庫。

注意:當你試圖打開數據庫可寫,使用getwritabledatabase如果系統發現像寫權限左右的例外,在這種情況下,系統可能會拋出異常的一些倍。在這種情況下,您可以使用getreadabledatabase打開數據庫。

2

如果你在谷歌的記事本示例項目看NotepadProvider.java,你會看到,他們同時使用 - 這取決於使用情況。

相關問題