Вызов хранимой процедуры PostgreSQL с Java возвращает ноль

1

У меня есть следующая хранимая процедура, написанная в 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;

Фактически, когда я выполняю select getColor(2) в pgAdmin, я получаю ожидаемое значение. Я пытаюсь назвать это так на 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
    CallableStatement предназначен для «реальных» хранимых процедур. Функцию postgres лучше вызывать запуском select getColor(2) с использованием PreparedStatement и executeQuery()
  • 0
    В postgresql процедура хранения создается с помощью инструкции create function sqlines.com/postgresql/stored_procedures_functions
Показать ещё 6 комментариев
Теги:
stored-procedures

1 ответ

0

Концепция хранимых процедур Postgresql отличается от других поставщиков, таких как Oracle. В основном то, что в Oracle называется процедурой хранилища в Postgresql, может быть функцией, а для вызова функции в Java лучше использовать инструкции подготовки и методы executeQuery, как в следующем примере

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

Спасибо всем, кто помог в комментариях!

  • 0
    Я бы порекомендовал "String call = "select getColor(?)"; И вместо этого connection.prepareStatement()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню