【问题标题】:When SQLiteOutOfMemoryException will be thrown什么时候会抛出 SQLite OutOfMemoryException
【发布时间】:2016-12-06 11:22:44
【问题描述】:

我正在使用insertOrThrow 方法将数据插入SQLiteDatabase。手动处理抛出的异常以确保将给定值插入到数据库中。

SQLiteFullExceptionSQLiteDiskIOException 等例外情况在android developer site 中有一些说明可供参考。

但是对于SQLiteOutOfMemoryException,没有任何描述可以参考。 有谁知道这个SQLiteOutOfMemoryException 什么时候会被抛出。如果有人知道,请分享。

【问题讨论】:

  • 每当底层 c/c++ 库返回 SQLITE_NOMEM

标签: java android sqlite android-sqlite


【解决方案1】:

当您的 sqlite DB 大小超出堆大小时应该会发生这种情况,如果 namenullSQLiteOpenHelper() 将创建一个内存数据库。尝试在清单中使用 largeHeap 或不要创建内存数据库

【讨论】:

  • 当你在内存中创建它时,看到这个stackoverflow.com/questions/11657191/…
  • @masoudvali 所以 SQLiteOutOfMemoryException 只会发生在内存类型而不是文件类型数据库
  • 是的,避免在数据库中存储大字符串或字节数组
  • 所以 SQLiteOutOfMemoryException 只会发生在内存类型中
  • @Selvin 不,这只是其中一种情况,我不知道其他情况
【解决方案2】:

Android 中 SQlite 数据库的大小有一些限制。 SQLiteOutOfMemoryException 当数据库大小超过我在下面的 kitkat 上测试过的 4 MB 但在 marshmellow 上超过 9 MB 时会出现。它还取决于运行应用程序的可用空间。 因此,请将您的数据库保持在 4 MB 以下。 始终在文件中正确备份数据库并根据应用程序要求与应用程序服务器同步。 永远不要将图像以 BLOB 或 Base64 字符串格式存储在 SQlite DB 中。

【讨论】:

  • 我猜是 4MB 的内存数据库。
  • 是的。最佳做法是始终保持在 4 MB 以下并避免存储大字符串。
  • 为了获得最佳实践,请使用文件;)并且您的答案没有指定数据库的存储。因此,据我所知,您是在说 SQlite 数据库无法存储超过 9MB 的任何内容...
  • 您可以使用文件系统来存储大量数据。使用适当的字符串delemeters编写您的数据库内容以分离数据。
  • 在 SQlite DB 中存储大量数据的另一种方法是将您的 db 文件放在外部存储中并存储数据直到外部存储未填满。享受吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 2011-03-22
  • 2011-11-10
  • 1970-01-01
  • 2014-11-13
相关资源
最近更新 更多