【问题标题】:Using java invoke Postgresql's procedure使用java调用Postgresql的过程
【发布时间】:2013-01-05 09:46:50
【问题描述】:

从 postgresql 的文档中我发现:

con.setAutoCommit(false);

过程调用。

CallableStatement proc = con.prepareCall("{ ? = call doquery ( ? ) }");
proc.registerOutParameter(1, Types.Other);
proc.setInt(2, -1);
proc.execute();
ResultSet results = (ResultSet) proc.getObject(1);

参考here

虽然,我试图创建一个过程,就像

CREATE OR REPLACE FUNCTION PSSQLPRC(pA IN VARCHAR,pB IN NUMERIC,PC OUT NUMERIC)
RETURNS NUMERIC
AS $$<br> begin

... ... 
end;
$$ Language PLPGSQL;

使用java调用postgresql过程如下

CallableStatement proc = con.prepareCall("{ ? = call PSSQLPRC(?,?,?) }");
proc.registerOutParameter(1, Types.NUMERIC);
proc.setString(2,"abc");
proc.setInt(3,10);
proc.registerOutParameter(4, Types.NUMERIC);
proc.execute();

当 CallableStatement 的对象执行时,会发生错误。我能做些什么来解决这个错误?上述陈述是否正确?

【问题讨论】:

  • 当我调试它时,sql语句更改为 select * from PSSQLPRC ('null','abc', '10', 'null') as result语句,它找不到具有四个参数的 PSSQLPRC...非常感谢!
  • sql 语句更改为 select * from PSSQLPRC ('null','abc', '10', 'null') as result in the statement(CallableStatement's object) ...
  • 如果你想传递null,不要用单引号括起来。 'null' 是字符文字,null 是空值。
  • 你好,我的担心是找不到四参数的过程,我在PSSQL中定义了三参数的过程...非常感谢!

标签: java postgresql call procedure


【解决方案1】:

您真的需要存储过程的 2 个返回值吗? 如果没有,请尝试将函数更改为:

CREATE OR REPLACE FUNCTION PSSQLPRC(pA IN VARCHAR,pB IN NUMERIC)
RETURNS NUMERIC

还有 Java 代码:

CallableStatement proc = con.prepareCall("{ ? = call PSSQLPRC(?,?) }");
proc.registerOutParameter(1, Types.NUMERIC);
proc.setString(2,"abc");
proc.setInt(3,10);
proc.execute();

【讨论】:

  • 嗨,Perter 非常感谢您的帮助...我想再问几个问题:1. 使用 java 调用 PSSQL PROEC 时使用两个返回值是否正确?2。如果我真的需要两个返回值,我该如何运行它使用 CALL...非常感谢!
  • 嗨,Perter 看来你是对的!带有out类型参数的postgresql函数PSSQLPRC在我们创建成功时会自动改变并省略out类型参数....
猜你喜欢
  • 2021-04-18
  • 2023-03-05
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
相关资源
最近更新 更多