我有一个内存中的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 ”的位置。
我该怎么做?
答案 0 :(得分:0)
这是我在2.2.9中使用的create procedure 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();
}