我有一个如下所示的UDF:
import java.util.concurrent.atomic.AtomicInteger;
public class Function {
private final static AtomicInteger counter = new AtomicInteger(1);
public static int getNextValue(String foo,int n, int m) {
return counter.incrementAndGet();
}
}
此UDF使用ddl注册:
CREATE ALIAS GET_NEXTVALUE FOR "Function.getNextValue";
我正在执行的语句是(来自Java):
try (CallableStatement cs = connection.prepareCall("{call get_nextvalue(?, ?, ?)}")) {
cs.setString(1, foo);
cs.setInt(2, bar);
cs.registerOutParameter(3, Types.INTEGER); //exception here
cs.executeUpdate();
return cs.getInt(3);
}
它引发异常:
org.h2.jdbc.JdbcSQLException: Invalid value "3" for parameter "parameterIndex" [90008-197]
检查h2的源代码,以下检查失败(JdbcCallableStatement:1628
,h2:1.4.197
):
if (parameterIndex < 1 || parameterIndex > maxOutParameters) {
其中parameterIndex
是3,而maxOutParameters
是1。这是错误还是我错过了什么?