升级后 HSQLDB 命令行关闭不再起作用

Posted

技术标签:

【中文标题】升级后 HSQLDB 命令行关闭不再起作用【英文标题】:HSQLDB command line shutdown no longer works after upgrade 【发布时间】:2020-12-30 22:09:39 【问题描述】:

在 Ubuntu 18.04 上,我能够使用以下单行程序在服务器模式下关闭正在运行的 HSQLDB 实例:

java -cp $CLASSPATH:/usr/share/java/hsqldbutil.jar:/usr/share/java/hsqldb.jar "org.hsqldb.cmdline.SqlTool" --inlineRc=url=jdbc:hsqldb:hsql://localhost/$DB_NAME,user=SA,password= --sql="SHUTDOWN;"

升级到 Ubuntu 20.04(使用 HSQLDB 2.4.1 和 HSQLDB Utils 2.5.0)后,失败并出现以下错误:

Error: Could not find or load main class org.hsqldb.cmdline.SqlTool
Caused by: java.lang.ClassNotFoundException: org.hsqldb.cmdline.SqlTool

确实,我在这两个 JAR 中的任何一个中都找不到 org.hsqldb.cmdline.SqlTool,也没有任何关于此功能在何处消失的提示。

docs 提到了sqltool.jar,但我在系统上的任何地方都找不到该文件。

SqlTool 类去哪儿了?或者我还能如何从 shell 脚本关闭正在运行的 HSQLDB 实例?

【问题讨论】:

【参考方案1】:

没有官方发布的名为 hsqldbutil.jar 的 jar。该 jar 包含 GUI 客户端,有一个 Ant 和 Gradle 构建选项。

通过http://hsqldb.org的下载链接从SourceForge下载hsqldb zip包

压缩包的/lib目录包含hsqldb.jar和sqltool.jar。在您的 Java 命令中使用这些 jar。这也确保您使用的是来自同一发行版本的 jar,因为混合不同的发行版本将无法正常工作。

【讨论】:

这些是 Ubuntu 附带的 JAR,作为 libhsqldb-java 包的一部分。 hsqldb-utils 包有一个 shell 脚本来调用 sqltool;运行脚本会引发相同的错误。猜猜这意味着 Ubuntu 软件包已损坏……将在那里提交错误。 另请注意,直到并包括版本 2.5.1,sqltool.jar 依赖于 hsqldb.jar,并且不能单独运行。从下一个版本开始,sqltool.jar 将独立工作。 我已经在bugs.launchpad.net/ubuntu/+source/hsqldb/+bug/1909811提交了一份关于 Ubuntu 的错误报告【参考方案2】:

只是为了稍微扩展一下 fredt 的答案,以下是我用来解决我的 21.10(顽皮)系统上的问题的实际步骤:

    确定您的系统运行的是哪个版本(Impish 似乎发布了 v2.5.1;在下面用您的版本替换 2.5.1):

    apt policy libhsqldb-java
    

    从SourceForge下载对应版本:https://sourceforge.net/projects/hsqldb/files/hsqldb/

    /hsqldb-2.5.1/hsqldb/lib/sqltool.jar 提取到/tmp

    运行:

    sudo -i
    mv /tmp/sqltool.jar /usr/share/java/sqltool-2.5.1.jar
    chown root: !$
    vi $(type -p hsqldb-sqltool)
    

    CLASSPATH 的某处添加/usr/share/java/sqltool-2.5.1.jar: 并退出vi(如果您对vi 不满意,请使用nano

    别忘了在 Launchpad 上为 user149408 的错误投票:https://bugs.launchpad.net/ubuntu/+source/hsqldb/+bug/1909811(在右上角登录;点击“此错误会影响 X 人。此错误会影响您吗?”链接左上方)。

【讨论】:

以上是关于升级后 HSQLDB 命令行关闭不再起作用的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2019:使用 vcvars64.bat 从命令行构建 C++ 不再起作用

`--disable-web-security` 命令似乎不再起作用

Xcode GM:OS X 命令行工具项目没有 swift 语言?

运行批处理文件后如何关闭命令行窗口?

如何从命令行停止 HSQLDB

如何通过cmd查看环境变量