SQLException: невозможно отправить оператор в текущем контексте

Я столкнулся с этим исключением при вызове хранимой процедуры через подготовленный оператор, однако он работает для вызываемого оператора. Мне интересно, если это необходимо использовать вызываемый оператор для вызова хранимой процедуры в voltdb?

String sql = "{call get_city_by_country(?)}";
PreparedStatement stat = conn.prepareStatement(sql);
stat.setString(1, "china");
ResultSet results = stat.executeQuery();

Выдает исключение ниже:

Exception in thread "main" java.sql.SQLException: Cannot submit statement in current context: '{call get_city_by_country(?)};'.
at org.voltdb.jdbc.SQLError.get(SQLError.java:45)
at org.voltdb.jdbc.JDBC4PreparedStatement.executeQuery(JDBC4PreparedStatement.java:121)

Этот работает отлично.

CallableStatement proc = conn.prepareCall(sql);
proc.setString(1, "china");
ResultSet results = proc.executeQuery();

1 ответ

Решение

Похоже, ваш драйвер поддерживает только CALL бежать на CallableStatement, Так что вам нужно использовать CallableStatement вместо.

Раздел 6.4 Java EE JDBC Соответствие спецификации JDBC 4.2, однако, говорит (empasis mine):

Драйверы должны поддерживать хранимые процедуры. DatabaseMetaData метод supportsStoredProcedures должен вернуться true, Драйвер также должен поддерживать полный escape-синтаксис API JDBC для вызова хранимых процедур с помощью следующих методов Statement , PreparedStatement , а также CallableStatement классы:

  • executeUpdate
  • executeQuery
  • execute

Это означает, что ваш драйвер не полностью соответствует требованиям соответствия JDBC Java EE. Возможно, вы захотите подать отчет об ошибке с поставщиком драйверов.

Другие вопросы по тегам