2016-12-06 97 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

相关问题