10

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

我在 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 db),this._conn是打开的,但是如果我想在它上面执行语句,看起来里面没有表也没有数据。它似乎没有恢复任何东西。

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

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

4

2 回答 2

4

看起来您缺少两件事: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 一起工作的唯一方法。在这种情况下,我认为版本并不重要。

于 2013-11-27T15:38:36.673 回答
1

引号和stat.close()无关紧要,根据链接:` https://bitbucket.org/xerial/sqlite-jdbc/wiki/Usage ',我已经测试过了。但是,当文件路径包含空格时,引号会有所帮助。

我认为这可能是由于 jdbc 驱动程序。试试 Xerial 的 SQLite JDBC 驱动程序,它对我来说很好用。

于 2015-03-11T00:40:39.533 回答