我正在使用SpringMVC,我遇到了HSQLDB和CallableStatement
这样的问题:
Java代码
String call = "{ ? = call MY_FUNCTION(?,?) }";
CallableStatement statement = connection.prepareCall(call);
异常
抛出以下异常:
java.sql.SQLException: Unknown JDBC escape sequence: { ? = call MY_FUNCTION(?,?) }
at org.hsqldb.jdbc.jdbcConnection.onStartEscapeSequence(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.nativeSQL(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.(Unknown Source)
at org.hsqldb.jdbc.jdbcCallableStatement.(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareCall(Unknown Source)
看HSQLDB JDBCConnection docs它说:
...为避免大量复杂性,目前尚未识别某些形式的输入空白。例如,驱动程序处理“{?= call ...}”但不处理“{?= call ...}或”{? = call ...}“
这导致相信call
应该被定义为
String call = "{?= call MY_FUNCTION(?,?)}";
然而,这引发了另一个异常,因为它在<init>
中失败并且甚至没有到达转义完成的部分,因此对我来说看起来更加错误:
java.sql.SQLException: Unexpected token: MY_FUNCTION in statement [ call MY_FUNCTION(?,?) ]
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)
根据this answer,这是不可能的,但它已过时并且正在查看它所支持的docs for jdbcCallableStatement。
如果与SpringMVC或HSQLDB存在某些冲突或者完全不同的话,我可能完全不知道自己要做什么。
是否可以将CallableStatement
与HSQLDB 1.8一起使用?若然,怎么做?