2011-03-23 73 views
14

我从互联网上下载了一个数据库。我将它保存在我的datase文件夹中,然后打开它。 在数据库里有一个包含6个字段的“广告”表。这些字段中的2个是BLOB。当我想从这张表中读取时......我遇到了一些问题......我注意到,当我读取一个大于1兆字节的blob字段的行时,这会导致例外......“从行中获取字段插槽0 col 0失败“。如果它是一个小blob,一切都OK ......预先感谢:)Android中的光标大小限制SQLite数据库

回答

39

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

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

+1

通常,您应该避免SQLite中的斑点,因为它们表现不佳;而是将blob数据保存为文件并将文件的位置存储在数据库中。 --->非常感谢.. – 2011-05-18 04:50:18

+0

AndroidKid是正确的。我相信存在一个BLOB的用例,但是,我想不出一个。 :) – Jonathan 2011-05-19 06:02:55

1

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

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

blob.getBytes(1, lengthOblob) ; 

第一种方法可以让你在阅读大块的斑点。第二个将一次性加载blob。

+0

我不确定你是什么意思的“一次加载”。假设'getBlob()'返回一个'byte []',数据已经存在于堆中...... – vaughandroid 2012-09-04 10:03:56

+4

假设你的'rs'是一个Cursor,那么第一次调用getBlob()会导致大数据失败,因为光标窗口大小。 – sgibly 2015-03-27 19:18:48

1

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

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

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

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

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

+0

更好的回答:不要在任何*数据库中使用BLOB。RDBM不太适合存储大量未格式化的数据 - 这就是文件系统的用途。 – 2011-05-19 05:58:56

+0

@David Souther感谢您的评论,你是对的。我想认为BLOB对某些东西是有用的,这就是为什么我不那么确定。但是,我想不出一个好的用例。存储BluRay电影? (开玩笑) – Jonathan 2011-05-19 06:04:53

+1

这篇文章是从2007年开始的。BLOBs肯定是支持的,并且至少有1.6(API等级4,又名Donut)。 OP指出,问题在于BLOB值超过1MB。 – 2012-07-18 04:25:56

8

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

活页夹事务缓冲器具有有限的固定大小,目前的1Mb, 其由所有交易在该过程进展共享。

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

+1

1 MB的限制是光标窗口的最大尺寸。这是用于存储IPC传输结果行的内存缓冲区。窗口大小动态增长到这个限制。 – WindRider 2013-10-14 15:43:11

11

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

+1

感谢您的参考。 – 2013-10-04 09:07:42

+1

@frederick nyawaya:什么是最好的?将图像/音频作为Blob存储在数据库中或仅存储文件系统的路径? – Ajay 2014-03-25 12:24:50

+0

@Ajay作为文件系统的一部分 – 2014-03-29 09:39:49