在没有光标的Android Sqlite中访问大型BLOB

Android的Cursor Window大小似乎有1MB的限制,这限制了从SQLite读取BLOB的能力。 我知道您可能会说我们不应该将BLOB存储在数据库中,但根据定义,BLOB被视为二进制大对象,如果不需要将它们存储在数据库中,则无需在任何数据库引擎中实现此类对象类型。

然而,在几乎所有情况下,Cursor实现的1 MB限制似乎都不够。 我需要在SQLite数据库中存储我的二进制数据是有正当理由的,它们都超过1 MB。 SQLite能够完美地处理BLOB,因为C API在Xcode(iPhone平台)中运行得非常好,可以毫无问题地检索大型对象。

我的问题是,如果我们可以在不使用游标的情况下访问Android中的BLOB数据。 我正在考虑在Java中对Sqlite进行较低级别的访问。 有什么建议么?

正如CL所提到的,使用NDK确实是一种在Java语言中通过C语言本地访问Sqlite的方法。 但是我意识到如果我想自己编写一个自定义包装器并尝试访问Java中的函数,它可能会变得非常混乱。

在搜索之后,我遇到了一个名为Sqlite4java的开源项目,这是一个围绕Sqlite的紧密包装,编译后可以在包括Android在内的各种平台上使用。 此库允许您在不使用Android Cursor的情况下与Sqlite交互,从而消除了限制。

我能够在480毫秒内检索20 MB的Blob。 这比通过游标从Sqlite读取一条小记录更快。 我相信这可以通过跳过使用Cursor来增强对Sqlite的任何查询。 这是这个伟大图书馆的链接: http : //code.google.com/p/sqlite4java/

Android的Java API始终具有1 MB的限制。

您不应该将该大小的BLOB存储在数据库中; 文件系统在处理它们时效率更高。

如果您真的想使用BLOB,则必须通过NDK直接访问C API。

实际上有一个解决方案没有诉诸于Android的SQLite包装器的不同实现!

从Android sqlite数据库中检索大blob