繁体   English   中英

覆盖现有文件

[英]Overwrite existing file

我想覆盖2个文件。 这两个文件都存储有关我的内存数据库(HSQLDB)的信息:db.data和db.script

我的以下代码应执行以下操作:

public class DBReset {
    public Path db_data = Paths.get("db_sep/db_backup/db.data");
    public Path db_script = Paths.get("db_sep/db_backup/db.script");
    public Path dest_data = Paths.get("db_sep/db.data");
    public Path dest_script = Paths.get("db_sep/db.script");

    public void discard() throws IOException {
        Files.copy(this.db_data, this.dest_data, StandardCopyOption.REPLACE_EXISTING);
        Files.copy(this.db_script, this.dest_script, StandardCopyOption.REPLACE_EXISTING);
    }
}

但是,如果我使用

public Class anotherClass {
    new DBReset.discard();
    // do something with DB
    new DBReset.discard();
    // do something other with DB
}

第二个discard()不会覆盖我的文件。

我使用discard()将数据库重置为其原始状态。 请不要问/告诉我还有其他方法可以重置数据库,实际的问题是为什么它不会覆盖我的文件。

似乎您没有关闭数据库。 如果数据库是打开的,则.data文件无法覆盖。 完成使用数据库后,执行以下SQL语句:

 SHUTDOWN

这应该由访问数据库的程序执行:

new DBReset.discard();
// do something with DB -- then perform SHUTDOWN in the same java process

遗憾的是SHUTDOWN不起作用。

public void discard() throws IOException, SQLException {
    Connection c = DBConnectFactory.getDataSource.getConnection();
    PreparedStatement ps = c.preparedStatement("SHUTDOWN"); 
    ps.executeUpdate();
    ps.close();
    c.close();

    Files.copy(this.db_data, this.dest_data, StandardCopyOption.REPLACE_EXISTING);
    Files.copy(this.db_script, this.dest_script, StandardCopyOption.REPLACE_EXISTING);
}

抛出Connection c = DBConnectFactory.getDataSource.getConnection();第一行Connection c = DBConnectFactory.getDataSource.getConnection(); java.sql.Exception: error in script file line: 1 unknown token: ...许多未知源。

在我的runQuery(String query)也进行了测试-打开一个连接,然后通过PreparedStatement执行给定查询-强制SHUTDOWN ,但是它引发与上述相同的错误,我应该在getConnection()处获得一个Connection。

我想做的是:

  1. 恢复原始数据库实例。
  2. 对DB, SELECTINSERT进行一些处理,然后进行一些声明。 基本上对数据库进行一些测试。
  3. 恢复原始数据库实例。
  4. 对数据库进行其他测试。

PS:我在文件模式下使用HSQLDB。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM