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
添加回答
举报