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



我有一个内存中的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"的位置。

我该怎么做?

这是我在 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();
}

最新更新