如何从SQLite数据库加载超过1MB的数据到Android Cursor?

8

我正在尝试从SQLite数据库加载超过1MB的数据到Android Cursor中。在加载时会出现以下错误:

08-04 11:10:15.813: ERROR/CursorWindow(4465): need to grow: mSize = 2097152, size = 403719, freeSpace() = 209669, numRows = 1
08-04 11:10:15.813: ERROR/CursorWindow(4465): Attempting to grow window beyond max size (2097152)
08-04 11:10:15.813: ERROR/Cursor(4465): Failed allocating 403719 bytes for blob at 0,13
08-04 11:10:15.813: DEBUG/Cursor(4465): finish_program_and_get_row_count row 0
08-04 11:10:15.899: ERROR/CursorWindow(4465): need to grow: mSize = 2097152, size = 403719, freeSpace() = 209669, numRows = 1
08-04 11:10:15.899: ERROR/CursorWindow(4465): Attempting to grow window beyond max size (2097152)
08-04 11:10:15.899: ERROR/Cursor(4465): Failed allocating 403719 bytes for blob at 0,13
08-04 11:10:15.899: DEBUG/Cursor(4465): finish_program_and_get_row_count row 0
08-04 11:10:15.899: ERROR/CursorWindow(4465): Bad request for field slot 0,0. numRows = 0, numColumns = 14
08-04 11:10:15.899: DEBUG/AndroidRuntime(4465): Shutting down VM.

如果有人知道如何将大于1MB的数据加载到Android游标中,请告诉我,谢谢。


你的游标为什么有1MB的数据?有很多行吗?你是否使用投影只使用所需的列?你使用blob吗?你能限制结果吗? - EboMike
我在一张表中有两个二进制大对象,一个是图片,另一个是音频。这两个二进制大对象的大小都超过了1MB。单个行的大小也超过了1MB。那么我该怎么办呢? - ilango j
1个回答

8

不要在数据库中存储500KB的二进制大型对象(blobs)。需要在数据库中存储唯一标识符,然后将这些二进制大型对象作为文件存储到存储系统上。如果使用MODE_PRIVATE模式,这些对象将不会被其他进程访问。


1
好的,谢谢您的建议。但是出于某些原因,我想使用数据库。 - ilango j
2
......哪些呢?你正在使用移动平台,因此你需要有足够的理由去选择一个低效的存储方法。 - EboMike
如何在应用程序目录中创建私有文件夹模式? - ilango j
就像我说的那样,使用MODE_PRIVATE。请参见此处:Context.openFileOutput: http://developer.android.com/reference/android/content/Context.html#openFileOutput%28java.lang.String,%20int%29 - EboMike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接