java中inout对话_java - 如何使用Java中的一个或多个INOUT参数调用postres过程 - 堆栈内存溢出...

在尝试使用Java 8和PostgreSQL 11 JDBC驱动(42.2.5和9.1-901-1.jdbc4)调用包含INOUT参数的存储过程`clone_ad`时遇到问题。Java代码设置INOUT参数并注册Out参数后,执行时分别抛出'必须使用CALL调用过程'和'该语句未声明OUT参数'的错误。寻求解决方案。
摘要由CSDN通过智能技术生成

postgresql 11中有一个存储过程:

CREATE OR REPLACE PROCEDURE clone_ad (

p_src_ad_id BIGINT,

p_ad_def_id BIGINT,

p_user_id BIGINT,

p_dst_ad_id INOUT BIGINT)

AS ...

它工作完美,但我无法从我的Java代码中调用它:-(

我有postgresql 11和java8。我尝试了两个postgres jdbc驱动程序org.postgresql:postgresql:42.2.5和postgresql:postgresql:9.1-901-1.jdbc4结果相同

当我使用

stmt = conn.prepareCall("{ call clone_ad(?, ?, ?, ?)}");

stmt.setLong(1,1L);

stmt.setLong(2,1000L);

stmt.setLong(3,999L);

stmt.setObject(4,null, Types.BIGINT);

stmt.registerOutParameter(4, Types.BIGINT);

boolean hadResults = stmt.execute();

java抛出:org.postgresql.util.PSQLException:错误:clone_ad(bigint,bigint,bigint,bigint)是一个过程提示:要调用一个过程,请使用CALL。

当我使用

stmt = conn.prepareCall("call clone_ad(?, ?, ?, ?)");

stmt.setLong(1,1L);

stmt.setLong(2,1000L);

stmt.setLong(3,999L);

stmt.setObject(4,null, Types.BIGINT);

stmt.registerOutParameter(4, Types.BIGINT);

boolean hadResults = stmt.execute();

java抛出:org.postgresql.util.PSQLException:该语句未声明OUT参数。 使用{?= call ...}声明一个。

我期望没有INOUT参数的另一个过程的调用。

有什么建议吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值