使用hsqldb 官方工具管理内嵌hsqldb——备份、恢复和可视化管理

文章介绍了如何在Java应用程序中利用hsqldb的DbBackupMain和DatabaseManagerSwingAPI进行内嵌数据库的备份、恢复以及通过shell脚本触发的可视化管理。备份包括离线和在线模式,恢复借助DbBackupMainAPI,可视化管理则遇到了需要设置DISPLAY环境变量和解决依赖问题的情况。
摘要由CSDN通过智能技术生成

使用hsqldb 官方工具管理内嵌hasqldb——备份、恢复和可视化管理

由于工作要求:

在内嵌hsqldb数据库的java应用程序中,提供备份、恢复和可视化管理三个功能的脚本程序,通过shell脚本触发。

通过官方文档:DbBackupMain API, DatabaseManagerSwing API 可通过上述API实现。
在这里插入图片描述

方案如下:

  • 备份
    • 离线模式
      通过文件copy方式
    • 在线模式
      stmt.executeupdate("BACKUP DATABASE TO  + destFilegetAbsolutePath() + "/' BLOCKING NOT COMPRESSED")
      
  • 恢复
    • 利用DbBackupMain API
  • 可视化
    • 利用DatabaseManagerSwing API

前提

定义静态变量,url, username, password等

private static final String SWING_CLASS_NAME = "org.hsgldb.util.DatabaseManagerSwing"private staticfinal String BACKUP_CLASS_NAME= "org.hsgldb.lib.tar.DbBackupMain";
private static String USER = "APP;
private static String PASSWORD ="APP":
private static DRIVER ="org.hsqldb.jdbc.JDBCDriver";
// test 为数据库名称
private  static String URL="jdbc:hsqldb:file:/db/system/test";

备份工具

  1. 离线备份

    if (offline) {FileUtils.copyDirectoryAbsolutely(srcFile,destFile)}
    

    离线仅需要把生成的数据库文件(.script、.lobs、.logs)copy到destFile即可

  2. 在线备份

    private void backup() {
    	// name: 数据库生成的script文件名称
    	String name = test.script;
    	String url = "jdbc:hsgldb:file:" + "jdbc:hsqldb:file:/db/system/" + namesubstring(0, name.index0f(".script"))
    	conn = DriverManager.getConnection(url,USER,PASSWORD);
    	stmt = conn.createStatement();
    	// destFile: 备份的目的地目录
    	stmt.executeupdate("BACKUP DATABASE TO'"  + destFile.getAbsolutePath() + "/' BLOCKING NOT COMPRESSED")
    	conn.commit();
    }
    

    在线模式,则是通过执行BACKUP DATABASE 命令来执行备份动作。备份完成后会生成.tar文件,格式如 test-20221103T123921.tar

恢复工具

通过官方APIDbBackupMain实现。
在这里插入图片描述
实现方法:

private void restore() {
	String[] args = new Stringl[] {"--extract", "--overwrite", files[0].getAbsolutePath(), destFile.getAbsolutePathiclass};
	Clazz clazz = getclassLoader().loadClass(BACKUP_CLASS_NAME);
	// call main method of org.hsgldb.lib.tar.DbBackupMain 
	Method main = clazz.getDeclaredMethod( "main",String[].class);
	main.invoke(null, args) ;
}

通过执行org.hsgldb.lib.tar.DbBackupMain 类中的main方法来执行备份。

可视化管理工具

  • 通过官方APIDatabaseManagerSwing 实现。
    在这里插入图片描述
  • 谷歌翻译参数如下:
    在这里插入图片描述
  • 实际使用:
private void ui () {
	String[] args = new String[]["--driver",driver,"--url", url,"--user", username."--password",password};
	class clazz = getclassLoader().loadClass(SWING_CLASS_NAME);
	// call main method of org.hsgldb.util.DatabaseManagerSwing
	Method main = clazz.getDeclaredMethod("main"String[].class);
	main.invoke( null, args) ;
}

shell 脚本

BASE= `dirname "$0"`
CLASSPATH="${CLASSPATH}:$BASE/lib/*""SJAVA" $JAVA_OPTS -cp "$CLASSPATH" com.test.hsql.utils.tools.DBToolManager

java 入口

public static void main(Stringl args) throws Exception {
	String op = args.get("OPERATION");
	switch(op) {
		case "backup":
			backup(args);
			break;
		case "restore":
			restore(args);
			break;
		case "ui":
			ui(args);
			break;
		default:
			throw new UnsupportTypeException("Un support operation: "+ op)
	}
}

可视化管理工具遇到的问题

  • 1、出现javaawt HeadlessException: NoX11 DISPLAY异常

    Caused by: javaawt HeadlessException :
    NoX11 DISPLAY variable was set, but this program performed an operation which requires it
    
    • 解决方法:
      设置DISPLAY属性:格式:windowsIP:0.0, 如: 199.167.253.147:0.0
      export DISPLAY=199.167.253.147:0.0
  • 2、出现java.lang.UnsatisfiedLinkError: 异常
    在这里插入图片描述

    • 解决方法:
      缺少依赖等,需要安装相关rpm包。如下:
      yum -y install xorg-x11-xauth xorg-x11-server-utils xorg-x11-server-Xnest libXtst
  • 3、修复以上问题后,还打不开可视化管理工具
    可取消设置shell 窗口的X11转发方式。如下:可取消勾选X11转发模式。尝试是否能打开。
    在这里插入图片描述

  • 4、若上述问题都修复,正常打开hsqldb可视化管理工具,未展示初始化创建的表

    最可能的原因:是因为数据库名称没对应

    因为hsql默认会生成一个名称为system的数据库,而笔者这里创建指定的数据库名称为test,那么实际生成的数据库配置文件中存在systemtest两个数据库,查看链接url中数据库是否为你所需要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值