Невозможно получить набор результатов после чтения выходных параметров
Я использую 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
метод.