如何用Java JDBC代码备份与恢复HSQLDB数据库指定表
HSQLDB 指定表结构与数据的JDBC备份实现
核心命令说明
HSQLDB的SCRIPT命令可精准导出指定表的结构(DDL)及数据,无需备份整个库:
- 导出单表结构+数据:
SCRIPT TABLE <表名> DATA TO '<输出文件路径>' - 批量导出多表到单个文件:
SCRIPT TABLE <表1> DATA TABLE <表2> DATA ... TO '<输出文件路径>'
针对你之前尝试的命令补充说明:
PERFORM EXPORT SCRIPT FOR DATABASE:导出全库,不符合指定表备份需求PERFORM EXPORT SCRIPT FOR TABLE <表名> DATA:仅导出数据,缺少表结构,需额外搭配结构导出命令,不如SCRIPT一步高效- 单独
SCRIPT命令:默认仅导出全库结构,需添加TABLE <表名> DATA参数实现指定表的完整备份
JDBC代码实现
以下代码通过JDBC连接HSQLDB,支持批量指定表名,可选择单表单独备份或合并到一个文件:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.util.List; public class HsqlDbTableBackup { public static void main(String[] args) { // 数据库连接配置 String dbUrl = "jdbc:hsqldb:file:/your/db/file/path"; // 按实际类型调整(文件/内存/服务器) String dbUser = "SA"; String dbPassword = ""; // 指定需要备份的表名列表 List<String> targetTables = List.of("user_info", "order_record", "product_detail"); // 备份文件输出目录(确保有写入权限) String outputDir = "/your/output/directory/"; try (Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword); Statement stmt = conn.createStatement()) { // 1. 单个表单独备份 for (String table : targetTables) { String singleOutputFile = outputDir + table + "_backup.sql"; String singleBackupCmd = String.format("SCRIPT TABLE %s DATA TO '%s'", table, singleOutputFile); stmt.executeUpdate(singleBackupCmd); System.out.println("完成备份:" + table + " -> " + singleOutputFile); } // 2. 合并所有指定表到一个备份文件(可选) String combinedOutputFile = outputDir + "selected_tables_full_backup.sql"; StringBuilder combinedCmd = new StringBuilder("SCRIPT "); for (String table : targetTables) { combinedCmd.append("TABLE ").append(table).append(" DATA "); } combinedCmd.append("TO '").append(combinedOutputFile).append("'"); stmt.executeUpdate(combinedCmd.toString()); System.out.println("完成合并备份 -> " + combinedOutputFile); } catch (Exception e) { e.printStackTrace(); } } }
注意事项
- 确保HSQLDB的JDBC驱动(
hsqldb.jar)已加入项目依赖或类路径 - 数据库连接URL需匹配实际部署类型:文件型(
jdbc:hsqldb:file:...)、内存型(jdbc:hsqldb:mem:...)、服务器型(jdbc:hsqldb:hsql://localhost:9001/...) - 若操作内存数据库,需先执行
CHECKPOINT命令持久化数据后再备份,避免数据丢失 - 大表备份时可调整JDBC连接的超时参数,防止操作中断
内容的提问来源于stack exchange,提问作者gourabix
相关产品推荐
相关产品推荐

