如图所示:http://www.postgresql.org/docs/7.4/static/jdbc-callproc.html

// Turn transactions off.
con.setAutoCommit(false);
// Procedure call.
CallableStatement upperProc = con.prepareCall("{ ? = call upper( ? ) }");
upperProc.registerOutParameter(1, Types.VARCHAR);
upperProc.setString(2, "lowercase to uppercase");
upperProc.execute();
String upperCased = upperProc.getString(1);
upperProc.close();

我可以改为:
// Turn transactions off.
con.setAutoCommit(false);
// Procedure call.
CallableStatement upperProc = con.prepareCall("{call upper( ? ) }");
upperProc.setString(2, "lowercase to uppercase");
upperProc.execute();
upperProc.close();

我刚把那个?在呼叫上限之前。我的查询只是插入,所以不需要值。我想保持这种格式,因为mysql也使用这种格式,所以我可以在JAVA中重用很多代码。

最佳答案

JavaDoc for CallableStatement显示不带返回值的语法:

   {call <procedure-name>[(<arg1>,<arg2>, ...)]}

所以如果PgJDBC不接受它,那就是一个bug。
你可以把? =去掉。

09-26 10:01