Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HSQL数据库:加载特定Java类路径_Java_Hsqldb - Fatal编程技术网

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

HSQL数据库:加载特定Java类路径,java,hsqldb,Java,Hsqldb,我有一个内存中的HSQL数据库(v1.8)正在运行,我可以使用Java连接到它并运行“创建表””查询 我正在尝试创建和运行存储过程,从HSQL文档中可以创建一个别名并使其指向Java类。然后让Java类执行存储过程将执行的必要处理 我已经在HSQL中使用如下语句创建了一个别名- CREATE ALIAS MySPROC FOR "com.mypackage.MyClass.myFunction"; 然后我尝试使用如下Java代码运行此存储过程- java.sql.CallableStatem

我有一个内存中的HSQL数据库(v1.8)正在运行,我可以使用Java连接到它并运行“创建表””查询

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

我已经在HSQL中使用如下语句创建了一个别名-

CREATE ALIAS MySPROC FOR "com.mypackage.MyClass.myFunction"; 
然后我尝试使用如下Java代码运行此存储过程-

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.
java.lang.RuntimeException:java.sql.SQLException:Function not found com.mypackage.MyClass java.lang.ClassNotFoundException:com.mypackage.MyClass在语句[调用myproc(?,,?)]
位于org.hsqldb.jdbc.Util.throwError(未知源)
位于org.hsqldb.jdbc.jdbcPreparedStatement。(来源未知)
位于org.hsqldb.jdbc.jdbcCallableStatement。(来源未知)
位于org.hsqldb.jdbc.jdbcConnection.prepareCall(未知源)
等
我的理解是,我必须向HSQL显示“com.mypackage.MyClass”的位置


如何做到这一点?

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

这不是一个答案,只是一个观察:如果您将HSQL升级到至少2.2,您可以使用本机SQL过程,而不必使用Java类。