Этот синтаксис 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;
т.е. он связан с API резервного копирования SQLite, который может работать только с реальными файлами, а не со структурами данных в памяти.
Итак, я боюсь, что в текущих версиях SQLite вы не сможете перехватить эту резервную копию и отправить ее в переменную byte[]
без записи промежуточного временного файла, независимо от того, используете ли вы непосредственно jOOQ, JDBC или собственный SQLite