升级后 HSQLDB 命令行关闭不再有效
HSQLDB command line shutdown no longer works after upgrade
在 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
,但我在系统中的任何地方都找不到该文件。
SqlToolclass哪里去了?或者我还能如何从 shell 脚本关闭 运行 HSQLDB 实例?
没有官方发布的名为 hsqldbutil.jar 的 jar。对于由 GUI 客户端组成的 jar,有一个 Ant 和 Gradle 构建选项。
下载 link 从 SourceForge 下载 hsqldb zip 包
压缩包的/lib目录包含hsqldb.jar和sqltool.jar。在您的 Java 命令中使用这些罐子。这也确保您使用的是同一发行版本的罐子,因为混合不同的发行版本将无法正常工作。
为了进一步阐述 fredt 的回答,以下是我在我的 22.04 (jammy) 工作站上用来解决问题的实际步骤:
确定您的系统是哪个版本运行(Jammy 似乎发布了 v2.6.1;用以下适当的版本替换 2.6.1
):
apt policy libhsqldb-java
从SourceForge下载对应版本:https://sourceforge.net/projects/hsqldb/files/hsqldb/
提取/hsqldb-2.6.1/hsqldb/lib/sqltool.jar
到/tmp
-
sudo -i
mv /tmp/sqltool.jar /usr/share/java/sqltool-2.6.1.jar
chown root: !$
vi $(type -p hsqldb-sqltool)
在hsqldb.jar:
之后的CLASSPATH
中添加/usr/share/java/sqltool-2.6.1.jar:
,然后退出vi
(如果你对vi不适应就用nano
)
别忘了在 Launchpad 上给 user149408 的错误投票:https://bugs.launchpad.net/ubuntu/+source/hsqldb/+bug/1909811(登录 top-right 手角;点击“这个错误影响 X 人。这个错误会影响你吗?” link 左上方票)。
在 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
,但我在系统中的任何地方都找不到该文件。
SqlToolclass哪里去了?或者我还能如何从 shell 脚本关闭 运行 HSQLDB 实例?
没有官方发布的名为 hsqldbutil.jar 的 jar。对于由 GUI 客户端组成的 jar,有一个 Ant 和 Gradle 构建选项。
下载 link 从 SourceForge 下载 hsqldb zip 包压缩包的/lib目录包含hsqldb.jar和sqltool.jar。在您的 Java 命令中使用这些罐子。这也确保您使用的是同一发行版本的罐子,因为混合不同的发行版本将无法正常工作。
为了进一步阐述 fredt 的回答,以下是我在我的 22.04 (jammy) 工作站上用来解决问题的实际步骤:
确定您的系统是哪个版本运行(Jammy 似乎发布了 v2.6.1;用以下适当的版本替换
2.6.1
):apt policy libhsqldb-java
从SourceForge下载对应版本:https://sourceforge.net/projects/hsqldb/files/hsqldb/
提取
/hsqldb-2.6.1/hsqldb/lib/sqltool.jar
到/tmp
-
sudo -i mv /tmp/sqltool.jar /usr/share/java/sqltool-2.6.1.jar chown root: !$ vi $(type -p hsqldb-sqltool)
在
hsqldb.jar:
之后的CLASSPATH
中添加/usr/share/java/sqltool-2.6.1.jar:
,然后退出vi
(如果你对vi不适应就用nano
)别忘了在 Launchpad 上给 user149408 的错误投票:https://bugs.launchpad.net/ubuntu/+source/hsqldb/+bug/1909811(登录 top-right 手角;点击“这个错误影响 X 人。这个错误会影响你吗?” link 左上方票)。