Android SQLiteDatabase中的游标大小限制

我从互联网上下载一个数据库。 我把它保存在我的datase文件夹中,然后打开它。 在数据库里面有一个6字段的“广告”表。 这些字段中有2个是BLOB。 当我想从这张表中读取…我有一些问题…我注意到,当我读取一个比1兆字节更大的blob字段的行时,这会导致exception…“从行中获取字段插槽0 col 0失败“。 如果这是一个小blob,一切都没事…先谢谢了:)

由于dynamic解压缩,内部资产有1MB的限制; 1MB的限制似乎也适用于游标blob,但这似乎没有logging在任何地方。

一般来说,你应该避免在SQLite blob,因为他们performance不佳; 而是将blob数据保存为文件并将文件的位置存储在数据库中。

从SQLite数据库读取小于100KB的BLOB比从文件系统读取更快。 然而,比这更大的东西最好保存在磁盘上,并在db中引用。 更多: http : //www.sqlite.org/intern-v-extern-blob.html

每个操作有一个1MB的限制。 (我不确定这是每行,还是每列在SQLite查询的情况下)。 这个限制是由于SQLite API与Binder / Parcel IPC系统的out-of-process进程交互。 同一限制适用于Bundle内的值(例如,Intent extras)。

Binder事务缓冲区具有有限的固定大小,当前为1Mb,由进程中正在进行的所有事务共享。

请参阅: http : //developer.android.com/reference/android/os/TransactionTooLargeException.html

您正在使用的查询“select”说blob? 你可以省略它吗? 如果你不能,你在使用:

blob = rs.getBlob(column) ; InputStream in = blob.getBinaryStream(); 

要么

  blob.getBytes(1, lengthOblob) ; 

第一种方法会让你阅读大块的blob。 第二个将会一次加载所有的blob。

看起来像Android中的BLOB支持尚未实现…

http://www.basic4ppc.com/forum/basic4android-updates-questions/6648-support-sqlite-blob.html

哪些数据存储在BLOB字段中? 我会猜测图片。

我会build议不要使用BLOBs。 文件系统是二进制数据更好的select。

你能解释一下你想用数据库完成什么吗?