/ / Wywołanie procedury składowanej PostgreSQL z Javą zwraca null - java, postgresql, procedury składowane

Wywołaj procedurę zapisaną PostgreSQL z Java zwraca null - java, postgresql, stored-procedures

Mam następującą procedurę zapisaną w PostgreSQL 9.3, która działa idealnie:

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;

W rzeczywistości, kiedy wykonuję select getColor(2) w pgAdmin otrzymuję oczekiwaną wartość. Próbuję to tak nazwać z Java (wersja uproszczona):

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

Problemem jest hadResults jest zawsze zerowy. Jakieś pomysły?

Odpowiedzi:

0 dla odpowiedzi № 1

Koncepcja procedur przechowywanych Postgresql jest czymśróżni się od innych dostawców, takich jak Oracle. Zasadniczo to, co w Oracle nazywa się procedurą składowania w Postgresql, może być funkcją, a wywołanie funkcji w Javie lepiej jest użyć instrukcji przygotowania i metod executeQuery, jak w poniższym przykładzie

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

Dziękuję wszystkim, którzy pomogli w komentarzach do pytania!