Я соединяюсь с SQL Server (2005) через Java с помощью Драйвера 2.0 JDBC Microsoft SQL Server.
Как я получаю возвращаемое значение из хранимой процедуры? Я делаю что-то как:
Connection connection = dataSource.getConnection()
CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }");
proc.execute();
Я должен использовать, выполняются ()? executeQuery ()? executeUpdate ()? Ни один из них, кажется, не возвращает возвращаемое значение по умолчанию, но я не действительно уверен, как добраться до него.
РЕДАКТИРОВАНИЕ 1: Чтобы быть ясным, я знаю, как назвать хранимые процедуры. Этот вопрос конкретно о том, как получить ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ (в противоположность Набору результатов). Возвращаемое значение является целым числом, которое обычно сгенерировано, когда Вы выполняете запрос без Набора результатов или если Вы конкретно заявляете что-то как RETURN 0
в Вашем SQL.
РЕДАКТИРОВАНИЕ 2: executeUpdate () возвращает интервал, но этот интервал не является тем же как Возвращаемым значением. Кроме того, параметр не является тем же как возвращаемым значением.
Bozho's 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
. Я протестировал этот метод и он действительно работает.
c.prepareCall("? = ..");
cs.execute();
String returnedValue = cs.getString(1);
(или метод соответствующего типа. Вы можете использовать getObject
альтернативно)
Из старого учебника по началу работы
методы getXXX в CallableStatement получают значения из OUT-параметров и/или возвращают значение хранимой процедуры.
(Btw, ссылки, предоставленные Умешем, содержали подобную информацию)
.