2016-12-06 98 views
2

我使用insertOrThrow方法將數據插入SQLiteDatabase。引發異常處理manullay以確保給定值插入到數據庫中。當拋出SQLiteOutOfMemoryException時

例外情況如SQLiteFullException,SQLiteDiskIOExceptionandroid developer site中有一些說明可供參考。

但是對於SQLiteOutOfMemoryException沒有說明可以參考。 有沒有人知道什麼時候這SQLiteOutOfMemoryException將被拋出。如果有人知道,請分享。

+2

每當當你在內存中創建它underlaing C/C++庫將返回SQLITE_NOMEM – Selvin

回答

2

它應該發生在你的sqlite數據庫大小超出堆大小時,SQLiteOpenHelper()將創建一個內存數據庫,如果namenull。嘗試在清單中使用largeHeap或不要創建內存數據庫

+1

,看到這個http://stackoverflow.com/questions/11657191/using-in-memory-sqlite-android –

+0

我編輯我的答案 –

+0

@ masoudvali所以SQLiteOutOfMemoryException將只發生在內存中的類型不適用於文件類型數據庫 – uday

0

在android中SQlite數據庫的大小有一些限制。 SQLiteOutOfMemoryException將在數據庫大小超過4 MB時產生,我已經在下面的kitkat上進行了測試,但是在超過9 MB的時候發生了marshmellow。它還取決於可用空間來運行應用程序。 因此,請將您的數據庫保留在4 MB以下。 始終根據應用程序要求,對文件中的數據庫進行適當的備份並與應用程序服務器同步。 從不將圖像以BLOB或Base64字符串格式存儲在SQlite數據庫中。

+1

4MB的內存數據庫我猜。 – AxelH

+0

是的。對於最佳實踐,始終保持在4 MB以下,並避免存儲大型字符串。 –

+1

對於最佳實踐,請使用文件;)而您的答案並未指定數據庫的存儲。因此,從我所看到的情況來看,您告訴SQlite數據庫無法存儲超過9MB的任何內容...... – AxelH

相關問題