Android SQLiteDatabase中的游标大小限制

时间:2011-03-23 14:04:06

标签: android cursor size blob limit

我从互联网下载数据库。我将它保存在我的datases文件夹中,然后打开它。 在数据库内部有一个包含6个字段的“广告”表。其中2个字段是BLOB。当我想从这个表中读取...我有一些问题...我注意到当我读取一个blob字段大于1兆字节的行时,这会导致异常...“从行获取字段槽0 col 0失败“。如果它有点blob,一切都还可以......提前谢谢:)

5 个答案:

答案 0 :(得分:48)

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

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

答案 1 :(得分:11)

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

答案 2 :(得分:9)

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

  

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

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

答案 3 :(得分:1)

你正在使用的查询'选择'说blob?你能省略吗?如果你不能,你使用的是:

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

 blob.getBytes(1, lengthOblob) ;

第一种方法可以让你以块的形式读取blob。第二个是blob一次加载。

答案 4 :(得分:1)

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

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

BLOB字段中存储了哪些数据?我想猜图片。

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

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