用于备份 h2 数据库的 SQL“SCRIPT”命令

Posted

技术标签:

【中文标题】用于备份 h2 数据库的 SQL“SCRIPT”命令【英文标题】:SQL "SCRIPT" command to backup h2 database 【发布时间】:2016-11-14 15:20:57 【问题描述】:

我有一个带有h2 数据库的应用程序。我想在 Java 中使用SCRIPT 命令创建.sql 文件。

如果我使用 Prepared Statement 执行它:

PreparedStatement stmt = con.prepareStatement("SCRIPT");
ResultSet rs = stmt.executeQuery();

那么我怎样才能在单个字符串中获得整个结果。我是 Java 新手,因此无法找到获取该查询结果的方法,因为它不包含列名。

然后我将使用InputStream将其写入文件。

【问题讨论】:

【参考方案1】:

如果你想备份到一个文件中,你的H2实例的内容为SQL脚本,你可以直接使用SCRIPT TO 'path/to/my/file.sql'

try (Connection con = ...;
     Statement stmt = conn.createStatement()) 
    stmt.executeQuery(String.format("SCRIPT TO '%s'", sqlFilePath));


如果您想将其备份ZIP存档,您可以使用BACKUP TO 'path/to/my/file.zip'

try (Connection con = ...;
     Statement stmt = conn.createStatement()) 
    stmt.executeQuery(String.format("BACKUP TO '%s'", zipFilePath));

【讨论】:

好的,现在我知道如何将它移动到文件中了。将尝试并更新。 它工作正常,但 stmt.executeUpdate 需要替换为 stmt.executeQuery 也许我做错了什么,但在创建后执行此语句并仅获得一个文件,其中包含“CREATE USER IF NOT EXISTS”SA” SALT '4d7ed4bf3238b907' HASH '8326f36da8ddeddb5edb065ad2b6ac59536448f26d99ebf8c3c70e800但我知道数据库中存在表和其他对象.....有什么帮助吗?

以上是关于用于备份 h2 数据库的 SQL“SCRIPT”命令的主要内容,如果未能解决你的问题,请参考以下文章

恢复 h2 数据库

H2 SCRIPT 命令是不是像快照一样工作?

用于h2数据库的sql中的特殊字符

linux下 mysql数据库的备份和还原sql

H2 数据库:如何解锁数据库文件以进行备份?

linux下 mysql数据库的备份和还原