/ / Chamar o procedimento armazenado do PostgreSQL com Java retorna null - java, postgresql, procedimentos armazenados

Chamar o procedimento armazenado do PostgreSQL com Java retorna null - java, postgresql, procedimentos armazenados

Eu tenho o seguinte procedimento armazenado escrito no PostgreSQL 9.3 que está funcionando perfeitamente:

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;

Na verdade, quando eu executo select getColor(2) no pgAdmin eu recebo o valor esperado. Eu estou tentando chamá-lo assim de Java (versão simplificada):

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

O problema é que hadResults é sempre nulo. Alguma ideia?

Respostas:

0 para resposta № 1

Postgresql stored procedures concept é algodiferente de outros fornecedores como o Oracle. Basicamente, o que no Oracle é chamado de store procedure no Postgresql pode ser uma função, e para chamar uma função em Java é melhor usar prepare statements e executeQuery, como no exemplo a seguir

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

Obrigado a todos os caras que ajudaram nos comentários da pergunta!