java - 在 Java 中将 sqlite 从磁盘备份和恢复到内存

标签 java sqlite jdbc

我正在尝试将 sqlite 文件读入内存以获得更好的性能,当关闭我的应用程序时我想将它写回硬盘。

我在 Java 中使用 jdbc (3.7.2) 驱动程序。

根据文档,我的代码看起来像

this._conn = DriverManager.getConnection("jdbc:sqlite:");
Statement stat  = this._conn.createStatement();
File dbFile = new File(this._config.GetDataBaseFile());
if (dbFile.exists()) {
    this._logger.AddInfo("File exists.");
    stat.executeUpdate("restore from " + dbFile.getAbsolutePath());
}

文件存在(并且它是一个有效的 sqlite 数据库),this._conn 是打开的,但是如果我想在上面执行语句,似乎里面没有表也没有数据。它似乎没有恢复任何东西。

关于如何进一步解决/调试的任何建议?

(顺便说一句 - 如果我在我的连接上使用 stat.executeUpdate("backup to test.db"),它会备份我的空 :memory: db...)

最佳答案

看起来你遗漏了两件事:

  1. 文件名两边的引号。
  2. stat.close

尝试以下操作:

this._conn = DriverManager.getConnection("jdbc:sqlite:");
Statement stat  = this._conn.createStatement();
File dbFile = new File(this._config.GetDataBaseFile());
if (dbFile.exists()) {
    this._logger.AddInfo("File exists.");
    stat.executeUpdate("restore from '" + dbFile.getAbsolutePath() + "'");
    stat.close();
}

这是我让它与 Xerial SQLite JDBC 版本 3.7.15-M1 一起工作的唯一方法。在这种情况下,我认为版本并不重要。

关于java - 在 Java 中将 sqlite 从磁盘备份和恢复到内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17548026/

相关文章:

SQLite 默认值为 bool 列,未按预期工作

java - H2 不识别 regexp_like

java - 具有多个条目的属性的数据库表设计(例如 : Person -> Social Media)

java - Tomcat 7 - HTTPOnly - 错误的 Set-Cookie header - 未找到 token '='

Android Sqlite 问题

android - 我可以将非主键字段作为房间中自动生成的值吗

java - 使用 mariadb 驱动程序时未找到 JDBC、Socket 工厂

java - 如何在一列中使用两个 AS 运算符?

java - 迭代值时的 HashMap 线程安全

java - 使用 Gson() 创建一个 "flat"JSON