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. Возможно, вы захотите подать отчет об ошибке с поставщиком драйверов.