为了账号安全,请及时绑定邮箱和手机立即绑定

使用 jooq 上下文在内存 sqlite db 中备份到字节数组

使用 jooq 上下文在内存 sqlite db 中备份到字节数组

倚天杖 2021-12-22 19:35:12
private byte[] inMemSqliteDbBackup() {    byte[] data = null;    try (DSLContext dsl = DSL.using("jdbc:sqlite::memory:") {        ...        //insert some data         dsl.execute("backup to " + data); // backup to byte[], but unsupported , a file is needed         dsl.connection(connection -> {            // or, get underlying connection and open inputstream             // but there is no getInputStream in SqliteConnection        });    }    return data;}我们如何在内存中将 sqlite db 备份到 byte[] ?我经历了 SqliteConnection 并且它也没有给出 InputStream 。一种选择是通过将 url 用作“ jdbc:sqlite:/some-location”而不在内存数据库中使用,然后我们可以使用FileUtils.readFileToByteArray(new File(some-location)),但不确定我们是否可以在内存中使用 sqlite db 并仍然使用 Jooq 的 DSLContext。
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

该backup to语法不是本机 SQLite SQL 语法,而是由 Xerial JDBC 驱动程序根据此处的文档提供:


将整个数据库备份到 backup.db 文件中:


// Create a memory database

Connection conn = DriverManager.getConnection("jdbc:sqlite:");

Statement stmt = conn.createStatement();

// Do some updates

stmt.executeUpdate("create table sample(id, name)");

stmt.executeUpdate("insert into sample values(1, \"leo\")");

stmt.executeUpdate("insert into sample values(2, \"yui\")");

// Dump the database contents to a file

stmt.executeUpdate("backup to backup.db");

Restore the database from a backup file:

// Create a memory database

Connection conn = DriverManager.getConnection("jdbc:sqlite:");

// Restore the database from a backup file

Statement stat = conn.createStatement();

stat.executeUpdate("restore from backup.db");

如果您对他们的来源进行逆向工程,您可以看到该命令被拦截,并转换为以下特定方法org.sqlite.core.NativeDB:


native synchronized int backup(byte[] dbNameUtf8, byte[] destFileNameUtf8,

        ProgressObserver observer) throws SQLException;

即它绑定到 SQLite 备份 API,它只能对实际文件进行操作,不能对内存中的数据结构进行操作。


因此,恐怕您无法使用当前版本的 SQLite 拦截该备份并将其发送到byte[]变量中,而无需编写中间临时文件,无论是直接使用 jOOQ 或 JDBC 还是本机 SQLite


查看完整回答
反对 回复 2021-12-22
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信