Невозможно получить набор результатов после чтения выходных параметров

Я использую Java для доступа к БД mssql 2012

У меня есть хранимая процедура "procX" с принимает только 1 (скажем, с именем @p1) в параметре и возвращает один набор результатов. Это работает нормально, если я не пытаюсь прочитать возвращаемое значение, прежде чем я получу набор результатов. Код ниже. Если я удаляю "//" и получаю возвращаемое значение, я получаю null в результате.

cs = con.prepareCall("{? = call procX(?)}");
cs.registerOutParameter(1, Types.INTEGER);
cs.setInt("p1", 1);
cs.execute();         
//cs.getInt(1);
rs = cs.getResultSet();

И даже если я прочитал возвращаемое значение после получения набора результатов, это закроет набор результатов.

Есть ли способ прочитать возвращаемое значение, не делая невозможным получить набор результатов?

И, насколько я вижу, эта ситуация не ограничена для возвращаемого значения и возникает и для любых других выходных параметров.

2 ответа

Решение

Похоже, вы должны получить набор (ы) результатов перед чтением любого из выходных параметров.

Вы можете получить подробности с /questions/8719764/jdbc-executequery-vozvraschaet-i-resultset-i-vyihodnyie-parametryi/8719784#8719784

Это интересно,

  • во-первых: я не знаю, какой драйвер вы используете, но попробуйте изменить и предоставить нам информацию будет того же поведения или нет.
  • во-вторых: если вы используете Microsoft JDBC Driver для SQL Server, попробуйте настроить регистратор и посмотреть, где проблема, эта библиотека используетjava.util.logging.Logger для регистрации до / после выполнения каждой операции.
  • Я думаю, что вы используете Java 7, попробуйте понизить версию и запустить его на Java 6, почему? Потому что есть некоторая интересная логика (с интерфейсом Closeable) в драйвере Microsoft JDBC для SQL Server для getValue метод, который вызывается из getInt метод.
Другие вопросы по тегам