我在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
始终为空。
有什么想法吗?
答案 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();
感谢所有在问题评论中提供帮助的人!