使用Java调用PostgreSQL存储过程返回null

时间:2015-04-08 12:01:27

标签: java postgresql stored-procedures

我在PostgreSQL 9.3中编写了以下存储过程,它运行正常:

CREATE OR REPLACE FUNCTION getColor(i INT) 
 RETURNS VARCHAR AS $varColor$
    DECLARE varColor varchar;   
    BEGIN
      select color into varColor FROM colors where id = i;
      return varColor;
    END;
    $varColor$ LANGUAGE plpgsql;

事实上,当我在pgAdmin中执行select getColor(2)时,我得到了预期的值。 我试图从Java(简化版)这样称呼它:

String call =  "{ call getColor(?,?) }";
CallableStatement cstmt = connection.prepareCall(call);
cstmt.setInt(1, 2);
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
boolean hadResults = cstmt.execute();

问题是hadResults始终为空。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Postgresql存储过程概念与Oracle等其他供应商不同。 基本上在Oracle中称为Postgresql中的存储过程可以是一个函数,而在Java中调用函数最好使用prepare语句和executeQuery方法,如下例所示

String call =  "select getColor(?)";
PreparedStatement pstmt = connection.prepareStatement(call);
pstmt.setInt(1,1);
Resultset resultset = pstmt.executeQuery();

感谢所有在问题评论中提供帮助的人!