java - 在没有游标的情况下访问 Android Sqlite 中的大 BLOB

标签 java android sqlite blob android-cursor

Android 的光标窗口大小似乎有 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。这甚至比通过 Cursors 从 Sqlite 读取一条小记录还要快。我相信这可以通过跳过使用 Cursor 来增强对 Sqlite 的任何查询。这是这个很棒的图书馆的链接:http://code.google.com/p/sqlite4java/

关于java - 在没有游标的情况下访问 Android Sqlite 中的大 BLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17300407/

相关文章:

android - 就像房间持久性库中区分大小写一样

sqlite - SQLite 连接中的换行符\n

sqlite 查询用合法的回车替换隐藏/不可见的回车

java - 纯 Java 与 native SQLiteJDBC 驱动程序和嵌套 VM

java - Java 中的二维数组返回 null 结果

java - Eclipse 无法将我的类(class)识别为 fragment

java - 通过 SQLiteOpenHelper 从 Sqlite 插入和读取数据

android - 无法连接到本地 openfire XMPP 服务器

java - 基于屏幕大小自动调整UI,java swing中的UI

java - 如何在数据库处理程序类中调用添加方法