1

最近,我创建了一个 postgresql 的函数,如下所示:

CREATE OR REPLACE FUNCTION POSTPRC(A IN NUMERIC)
**RETURNS VOID**
AS
$$
BEGIN
... ...
END;
$$ LANGUAGE PLPGSQL;

如何使用 java 调用它,我使用了如下代码:

CallableStatement upperProc = con.prepareCall("{ ? = call POSTPRC( ? ) }");
upperProc.registerOutParameter(1, Types.NULL);
upperProc.setInt(2,23);
int flag=upperProc.executeUpdate();

但是每次都会出现错误,怎么办才能解决这个问题?

异常显示为:java.lang.ArrayIndexOutOfBoundsException: 2。

具有相应参数的过程 POSTPRC 可以在 pgAdminIII 工具中成功执行。



postgresql 应该使用语句 likes-{? = call procedure(?,?,?)},这是通过java调用的唯一方法。我已经测试了 {call procedure(?,?,?)} 等语句。每次都失败。其实postgresql的过程是函数,如果我们要调用postgresql的过程,我们最好定义postgresql的过程,不带参数或返回值......


欢迎任何意见!

谢谢

4

1 回答 1

2

我不太确定,?如果你的函数没有返回值,为什么你需要第一个。你也可以写

CallableStatement upperProc = con.prepareCall("{call POSTPRC( ? ) }"); 

看看这里

顺便说一句,如果您的函数没有返回值,那么您不需要使用 CallableStatements 执行此操作 - 您可以/应该也使用 PreparedStatement:

PreparedStatement pstmt = con.prepareStatement("SELECT * FROM POSTPRC( ? )")
pstmt.setInt(1,23);
pstmt.execute(); // omit the result
于 2013-01-07T03:41:38.713 回答