5

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

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

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

4

2 回答 2

7

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

在四处搜索之后,我发现了一个名为 Sqlite4java 的出色开源项目,它是 Sqlite 的紧密封装,编译后可在包括 Android 在内的各种平台上使用。该库允许您在不使用 Android Cursor 的情况下与 Sqlite 交互,从而消除了限制。

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

于 2013-06-26T23:09:01.827 回答
0

Android 的 Java API 总是有 1 MB 的限制。

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

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

于 2013-06-25T17:26:03.630 回答