当前位置: 首页 > 知识库问答 >
问题:

如何使用java中的一个或多个INOUT参数调用postres过程

陶和歌
2023-03-14

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和java 8我试过两个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.PSQLExctive:ERROR: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参数的另一个过程的工作原理我期望。

有什么建议吗?

共有1个答案

东明德
2023-03-14

jdbc驱动程序包含bug,但不能轻易修复,因为它破坏了向后兼容性:-(

查看详情:https://github.com/pgjdbc/pgjdbc/pull/1475

 类似资料:
  • 本文向大家介绍如何在Java中使用一个或多个参数实现构造函数引用,包括了如何在Java中使用一个或多个参数实现构造函数引用的使用技巧和注意事项,需要的朋友参考一下 方法引用也可以适用于Java 8中的构造函数。可以使用类名和new关键字创建构造函数引用。 可以将构造函数引用分配给任何定义与该构造函数兼容的方法的功能接口引用。 语法 具有一个参数的构造函数引用示例 输出结果 具有两个参数的构造函数引

  • 同事们,您能帮我用Hibernate4调用MSSQL2008存储过程,其中包含两个输入和两个输出参数吗?存储过程如下所示: 我正在尝试使用Session.CreateSQLQuery方法调用过程: 但也有一些不明朗的时刻: 如何注册多个输出参数? Session.CreateSQLQuery方法是否适合调用具有多个输出参数的存储过程? 更新 我有一个MS SQL过程 并具有映射文件: 运行应用程序

  • 我有一个 Scala 类,它使用 Apache Spark 中的 MR 作业返回输入类型 IN 的最大值。如果我从Scala调用它,这个类工作正常,它的工作原理如下: 现在我想让它也可以从java中调用,但是我在传递隐式参数时遇到了一些困难。我知道隐式参数可以通过在Java中将它们追加到参数列表中来传递,但是隐式参数是在Scala中。因此,我正在努力做到以下几点: 然后可以从java调用: 我尝试

  • 问题内容: 从PHP,我想在MySQL中调用存储过程。该过程采用输入 和 输出参数- 而不是 “ INOUT” 参数。 对于一个简单的示例,说我在MySQL中具有以下存储过程: 现在,从PHP脚本/页面的角度说,我有以下变量(我们将它们称为“ proc输入变量”),在我调用它时,我想将它们作为 输入 参数馈入存储过程: 假设在PHP脚本/页面方面,我还有以下变量(我们将它们称为“ proc输出变量

  • 我们目前正在使用Windows\Jenkins 2.107.1(无管道),我正在研究管道。我们有一个夜间构建作业,它从存储库中获取、提交和等待其他作业。我看到9个作业同时在同一主节点上运行(我们只有一个主节点)。我不清楚我们应该有一个Jenkinsfile还是多个Jenkinsfile。它不会是一个多分支管道,因为我们不会创建测试分支,然后再合并回主管道。在存储库中,我们有product1.0分支

  • 问题内容: 我正在尝试制作一个带有按钮的PyGtk Gui。当用户按下此按钮时,提示用户输入密码。 然后,它将为JQuery代码段克隆此Git存储库。 然后,将文件复制到 最后,它会强制删除Git存储库。 命令: 它在我的终端机上工作正常。 但是, 它仅通过GUI打开,我添加了密码,按Enter,然后再次关闭。 我只想在第一个执行命令 这是我的Python函数(带有命令): 问题答案: 要直接回答