Подтвердить что ты не робот

Получение возвращаемого значения из 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 (в отличие от набора результатов). Возвращаемое значение представляет собой целое число, которое обычно генерируется при выполнении запроса без набора результатов или если в вашем SQL указано как-то вроде RETURN 0.

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

4b9b3361

Ответ 1

2-й пересмотренный ответ Божо был близок, но не совсем там. Это действительно привело меня к ответу.

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

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

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

Ответ 2

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

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

От старый учебник по началу работы

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

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