Получение возвращаемого значения из JDBC MSSQL

Я подключаюсь к SQL Server (2005) через Java, используя JDBC-драйвер Microsoft SQL Server 2.0.

Как получить возвращаемое значение из хранимой процедуры? Я делаю что-то вроде:

Connection connection = dataSource.getConnection() CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }"); proc.execute(); 

Должен ли я использовать execute ()? ExecuteQuery ()? executeUpdate ()? Ни один из них, похоже, не возвращает возвращаемое значение по умолчанию, но я не совсем уверен, как добраться до него.

EDIT 1: Чтобы быть ясным, я знаю, как вызвать хранимые процедуры. Этот вопрос конкретно касается того, как получить значение RETURN VALUE (в отличие от набора результатов). Возвращаемое значение представляет собой целое число, которое обычно генерируется при выполнении запроса без набора результатов или если вы конкретно указываете что-то вроде RETURN 0 в вашем SQL.

EDIT 2: executeUpdate () возвращает int, но этот int не совпадает с возвращаемым значением. Кроме того, параметр OUT не совпадает с возвращаемым значением.

Второй пересмотренный ответ Божо был близок, но не совсем там. Однако это привело меня к ответу.

Взяв пример кода, я начал с того, что мы закончили:

 CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }"); proc.registerOutParameter(1, Types.INTEGER); proc.execute(); int returnValue = proc.getInt(1); 

Ключевыми элементами здесь являются «? =» Перед «вызовом» в функции prepareCall которая устанавливает место для возвращаемого значения и registerOutputParameter . Он должен быть зарегистрирован как Integer, так как возвращаемое значение всегда является int (по крайней мере, в SQL Server, возможно, оно отличается в других БД). Поэтому вы должны получить его с помощью getInt . Я тестировал этот метод, и он работает.

 c.prepareCall("? = .."); cs.execute(); String returnedValue = cs.getString(1); 

(или метод соответствующего типа. Вы можете использовать getObject альтернативно)

Из старого учебника

методы getXXX в CallableStatement извлекают значения из параметров OUT и / или возвращаемого значения хранимой процедуры.

(Btw, ссылки, которые были предоставлены Umesh, имели такую ​​информацию).

Interesting Posts

Безопасное обновление хранимой процедуры

Доступ к миграции на SQL-сервер 2012

Создание временной шкалы и хранилища SQL

Динамические результаты запроса в таблицу temp или табличную переменную

SQL Server: как получить / сохранить результат "профиля статистики"

Преимущества использования уникальных идентификаторов в качестве первичного ключа? в sql-сервере

Запросы связанного сервера SQL Server с ANSI_WARNINGS OFF

Как изолировать данные SQL от разных клиентов?

SSRS – повторное использование временной таблицы в нескольких наборах данных

Вариант транзакции Sequence контейнера SSIS

Могу ли я иметь более одного индекса в таблице базы данных?

Использование битового ввода в хранимой процедуре для определения того, как фильтровать результаты в предложении where

История запросов пользователя SQL Server

Закройте соединения SQL, когда соединение отключено

Почему вы должны создать таблицу с первичным ключом, но без и индекса

Давайте будем гением компьютера.