Получение возвращаемого значения из JDBC MSSQL - PullRequest
12 голосов
/ 22 декабря 2009

Я подключаюсь к SQL Server (2005) через Java с помощью драйвера Microsoft SQL Server JDBC 2.0.

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

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

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

РЕДАКТИРОВАТЬ 1: Чтобы было ясно, я знаю, как вызвать хранимые процедуры. Этот вопрос конкретно о том, как получить ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ (в отличие от набора результатов). Возвращаемое значение - это целое число, которое обычно генерируется, когда вы выполняете запрос без набора результатов или если вы специально указали в SQL что-то вроде RETURN 0.

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

Ответы [ 2 ]

35 голосов
/ 22 декабря 2009

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

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

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

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

2 голосов
/ 22 декабря 2009
c.prepareCall("? = ..");
cs.execute();
String returnedValue = cs.getString(1);

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...