Получение возвращаемого значения из 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 ()? Ни один из них, похоже, не возвращает возвращаемое значение по умолчанию, но я не совсем уверен, как добраться до него.
- Как получить выходное значение из хранимой процедуры через сквозной запрос DAO
- Как получить возвращаемое значение из моей хранимой процедуры?
- Как проверить, завершила ли хранимая процедура все операции вставки / удаления / обновления?
- C # и SQL Server: получить результат из хранимой процедуры
- Как правильно убрать возвращаемое значение из вызова в хранимую процедуру
EDIT 1: Чтобы быть ясным, я знаю, как вызвать хранимые процедуры. Этот вопрос конкретно касается того, как получить значение RETURN VALUE (в отличие от набора результатов). Возвращаемое значение представляет собой целое число, которое обычно генерируется при выполнении запроса без набора результатов или если вы конкретно указываете что-то вроде RETURN 0
в вашем SQL.
EDIT 2: executeUpdate () возвращает int, но этот int не совпадает с возвращаемым значением. Кроме того, параметр OUT не совпадает с возвращаемым значением.
- Получить возвращаемое значение (скалярное), а не таблицу результатов, из хранимой процедуры с использованием Java и Hibernate
- Возвращать идентификатор после вставки C # с помощью SQL Server
- Возвращаемое значение из команды SQL Server Insert с использованием c #
- Сохраненная процедура Возвращаемое значение для сбоя SQL-заданий
- Когда SqlCommand закрывается при использовании в другой функции?
- Вызов хранимой процедуры с возвращаемым значением
Второй пересмотренный ответ Божо был близок, но не совсем там. Однако это привело меня к ответу.
Взяв пример кода, я начал с того, что мы закончили:
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, имели такую информацию).