java - 从字节数组在内存数据库中创建 SQLite

标签 java sqlite sqljet

我需要使用一些 Java 代码处理来自 SQLite 数据库的数据。问题在于数据库是从外部服务中检索的,因此它只能作为 InputStream 使用。

我真的很想避免在开始处理数据之前将数据库保存到文件系统,但我没有找到这样做的方法。

我目前正在使用 SqlJet ,因为它提供了创建内存数据库的选项。但是,似乎没有办法将 InputStream/字节数组转换为数据库。

没有什么强制我使用 SqlJet , 如果它提供所需的功能,它可以很容易地被任何其他工具替换。

最佳答案

这样是不行的。也许 Java 支持某种机制来创建某种形式的虚拟文件,该文件作为某种物理文件在本地(对当前进程)呈现。

我可以想出一种方法来解决该限制,但在您的上下文中这可能不可行或 Not Acceptable 。您可以更改服务以返回数据库的转储并将其加载到接收方的内存数据库中:

这是生成转储的一种方法:

# sqlite3
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table foo (i text);
sqlite> insert into foo values ('a');
sqlite> insert into foo values ('b');
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE foo (i text);
INSERT INTO foo VALUES('a');
INSERT INTO foo VALUES('b');
COMMIT;

关于java - 从字节数组在内存数据库中创建 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12111386/

相关文章:

java - 将第一个元素作为 Null 添加到队列中

android - 删除超过 x 天的 android SQLite 行

java - DatabaseHandler中的DatabaseHandler()不能应用于

android - 将 Android-SQLite 代码移植到非 Android SQLite

java - SqlJet 事务误用错误

java - 是否有允许从多个 VM 访问的 Java 进程内数据库?

java - 知道谁锁定了对象

java - Android TextView 和 ListView 中可点击的按钮

java - 在 Java 中,如果一个空指针很少发生,那么使用 catch 而不是 if 会更好吗?

sqlite - 如何在Xamarin表单中使用SqLite?