22

我从互联网上下载了一个数据库。我将它保存在我的数据文件夹中并打开它。在 db 中有一个包含 6 个字段的“广告”表。其中 2 个字段是 BLOB。当我想从这个表中读取时......我有一些问题......我注意到,当我读取一个大于 1 兆字节的 blob 字段的行时,这会导致异常......“从行获取字段槽0 列 0 失败”。如果它是一个小斑点,一切都很好......在此先感谢:)

4

5 回答 5

57

由于动态解压,内部资产限制为 1MB;1MB 限制似乎也适用于光标 blob,但这似乎没有在任何地方记录。

一般来说,你应该避免使用 SQLite 中的 blob,因为它们的性能很差;而是将 blob 数据保存为文件并将文件的位置存储在数据库中。

于 2011-05-12T17:12:07.530 回答
12

从 SQLite 数据库中读取小于 100KB 的 BLOB 比从文件系统中读取要快。但是,任何大于此值的内容最好保存在磁盘上,并在 db.xml 中提供参考。更多信息:http ://www.sqlite.org/intern-v-extern-blob.html

于 2012-10-03T13:06:15.370 回答
10

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

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

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

于 2012-09-05T22:08:39.490 回答
1

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

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

什么数据存储在 BLOB 字段中?我猜图片。

我建议不要使用 BLOB。文件系统是二进制数据的更好选择。

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

于 2011-05-19T05:56:43.163 回答
0

您正在使用“选择”的查询是说 blob 吗?可以省略吗?如果不能,您是否使用:

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

或者

 blob.getBytes(1, lengthOblob) ;

第一种方法可以让您分块读取 blob。第二个是一次性加载所有 blob。

于 2011-05-18T18:47:53.787 回答