使用JDBC调用PostgreSQL存储过程遇到报错问题
解决PostgreSQL无参数存储过程JDBC调用报错问题
问题原因
PostgreSQL的JDBC驱动会将JDBC标准的{ call xyz() }语法识别为函数调用,但xyz实际是存储过程。PostgreSQL对函数和存储过程的调用规则有明确区分:存储过程必须通过CALL命令触发执行,因此原写法会触发报错。
可行解决方案
- 方案一:修改
CallableStatement的SQL语句,直接使用PostgreSQL原生的CALL语法:
CallableStatement call = con.prepareCall("CALL xyz()"); call.execute();
- 方案二:使用普通
Statement执行CALL命令:
Statement stmt = con.createStatement(); stmt.execute("CALL xyz()"); stmt.close();
两种方式都能正确触发无参数存储过程xyz的执行,可根据代码习惯选择使用。
内容的提问来源于stack exchange,提问作者Tuntable
相关产品推荐
相关产品推荐

