首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jooq上下文在内存sqlite中备份字节数组

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

Stack Overflow用户
提问于 2018-11-01 13:41:35
回答 1查看 546关注 0票数 1
代码语言:javascript
复制
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备份到byte[]?我读过SqliteConnection,它也没有给出InputStream。

一种选择是不要在内存db中使用url作为"jdbc:sqlite:/some-location“,然后我们可以使用FileUtils.readFileToByteArray(new File(some-location)),但不确定我们是否可以在内存sqlite中使用相同的操作,而仍然可以使用Jooq的DSLContext。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-01 14:00:39

backup to语法不是本机SQLite SQL语法,而是Xerial驱动程序根据这里的文档提供

将整个数据库备份到backup.db文件: //创建内存数据库连接conn = DriverManager.getConnection("jdbc:sqlite:");语句stmt = conn.createStatement();//执行一些更新stmt.executeUpdate(“创建表示例(id,name)");stmt.executeUpdate(”插入示例值(1,\“leo\”));stmt.executeUpdate(“插入示例值(2,\"yui\")");//将数据库内容转储到文件stmt.executeUpdate(”备份到backup.db");从备份文件恢复数据库: //创建内存数据库连接conn = DriverManager.getConnection("jdbc:sqlite:");//从备份文件语句stat =conn.createStatement()还原数据库;从stat.executeUpdate(“从backup.db还原”);

如果您反向工程它们的源,您可以看到命令被拦截,并在org.sqlite.core.NativeDB中转换为这个特定的方法。

代码语言:javascript
复制
native synchronized int backup(byte[] dbNameUtf8, byte[] destFileNameUtf8,
        ProgressObserver observer) throws SQLException;

也就是说,它绑定到SQLite备份API,它只能使用实际的文件,而不是内存中的数据结构。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53102512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档