H2:用户定义的函数和registerOutParameter

时间:2018-09-04 21:41:34

标签: java database h2

我有一个如下所示的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:1628h2:1.4.197):

if (parameterIndex < 1 || parameterIndex > maxOutParameters) {

其中parameterIndex是3,而maxOutParameters是1。这是错误还是我错过了什么?

0 个答案:

没有答案