CallableStatement PostgreSQL: ошибка неверного числа параметров - PullRequest
2 голосов
/ 24 ноября 2011

Я пытаюсь написать пример хранимых функций в postgresql и вызвать их, используя CallableStatement, предлагаемый JDBC.

Вот мой тестовый код

Consumer bean =new Consumer();
CallableStatement pstmt = null;
try {
con.setAutoCommit(false);
String  query = "{ ? = call getData( ? ) }";
pstmt = con.prepareCall(query); 
 pstmt.registerOutParameter(1, Types.OTHER);
      pstmt.setInt(2,5);
      pstmt.execute(); // execute update statement
      bean=(Consumer)pstmt.getObject(1);
       System.out.println("bean"+bean.getConsumer_name());

И моя сохраненная функция имеет вид.

CREATE FUNCTION getData(int) RETURNS SETOF db_consumer AS $$
 SELECT * FROM db_consumer WHERE consumer_id = $1;
$$ LANGUAGE SQL;

Однако при попытке запустить код я получаю следующую ошибку.

org.postgresql.util.PSQLException: A CallableStatement was executed with an invalid    number of  parameters .

Есть идеи, почему это может происходить?

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011

Я не думаю, что вам нужно CallableStatement, поскольку вы должны иметь возможность запускать select * from getData(5) напрямую:

PreparedStatement pstmt = con.prepareStatement("select * from getData(?)")
pstmt.setInt(1,5);
ResultSet rs = pstmt.execute(); 
while (rs.next()) {
  System.out.println(rs.getString(1));
}
2 голосов
/ 24 ноября 2011

Вы пытаетесь вызвать функцию SETOFF с помощью оператора Callable.Это не произойдет!Вы всегда получите ошибку.Хранимые функции PostgreSQL могут возвращать результаты двумя разными способами.Функция может возвращать либо значение refcursor, либо SETOF некоторого типа данных.В зависимости от того, какой из этих методов возврата используется, определяет, как должна вызываться функция.Функции, которые возвращают данные в виде набора, не должны вызываться через интерфейс CallableStatement, а вместо этого должны использовать обычный интерфейс Statement или PreparedStatement.

...