HSQL 数据库:加载特定的 Java 类路径

Posted

技术标签:

【中文标题】HSQL 数据库:加载特定的 Java 类路径【英文标题】:HSQL database: loading a particular Java classpath 【发布时间】:2013-11-11 15:08:41 【问题描述】:

我有一个内存 HSQL 数据库 (v 1.8) 正在运行 - 我可以使用 Java 连接到它并运行“CREATE TABLE”查询。

我正在尝试创建和运行存储过程,并且从 HSQL 文档中创建一个别名并让它指向一个 Java 类。然后让 Java 类执行存储过程将执行的必要处理。

我在 HSQL 中创建了一个别名,使用类似以下语句 -

CREATE ALIAS MySPROC FOR "com.mypackage.MyClass.myFunction"; 

然后我尝试使用如下 Java 代码运行此 SPROC -

java.sql.CallableStatement stmt = cnt.prepareCall(storedProcedureCall);

其中 cnt 是 java.sql.Connection 类型。

我收到如下错误 -

java.lang.RuntimeException: java.sql.SQLException: Function not found com.mypackage.MyClass java.lang.ClassNotFoundException: com.mypackage.MyClass in statement [  CALL MySPROC(?,?,?)  ]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.jdbcCallableStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareCall(Unknown Source)
etc.

我的理解是我必须向 HSQL 显示“com.mypackage.MyClass”的位置。

我该怎么做?

【问题讨论】:

不是一个答案,只是一个观察:如果您将 HSQL 升级到至少 2.2,您可以使用本机 SQL 过程,而不必对 Java 类执行此操作。 【参考方案1】:

这是我在 2.2.9 中使用的创建过程 sql 语句:

drop procedure ms.cleanupLocations;
create procedure ms.cleanupLocations(myLocation int)
MODIFIES SQL DATA
BEGIN ATOMIC
    delete from ms.mytable where myLocation = 0;
END;

这是调用它的 Java 代码:

static void cleanupSigSumm(Connection cn, int locationNumber) throws SQLException 
    CallableStatement proc = cn.prepareCall(" call ms.cleanupSigSumm(?) ");
    proc.setInt(1, locationNumber);
    proc.execute();

【讨论】:

以上是关于HSQL 数据库:加载特定的 Java 类路径的主要内容,如果未能解决你的问题,请参考以下文章

无法确定合适的驱动程序类弹簧

Spring:HSQL-无法执行数据库脚本

HSQL可视化工具

HSQL 访问被拒绝加载文件

连接 HSQL 数据库管理器时无法从 Java 代码连接到 HSQL 数据库

何时以及如何将 java 类加载器标记为垃圾收集?