Я пытаюсь вызвать хранимую процедуру из java, и у меня возникают проблемы с корректным вызовом. Я просмотрел множество примеров, но они не соответствуют синтаксису хранимой процедуры, которую я пытаюсь вызвать.
STORED PROCEDURE CODE
------------------------
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[getMgr]
@UserID as varchar(5),
@ModeType as char(1)
AS
BEGIN
SELECT usermgrid from AllEmployees WHERE (ModeType = @ModeType AND UserID =
@UserID)
END
JAVA CODE
----------------------------
connection = getConnection();
cs = connection.prepareCall("{call lvhsp_GetManager(?, ?) }");
cs.setString(0, someUserID);
cs.setString(1, "0");
ResultSet resultSet = cs.executeQuery();
Я пробовал вызывать хранимую процедуру разными способами, но по-прежнему получаю ошибки.
Когда я называю это так, я получаю:
com.microsoft.sqlserver.jdbc.SQLServerException: индекс 0 выходит за допустимые пределы.
Я предполагаю, что это неправильный способ передачи параметра.
Я также пытался вызвать его с именами параметров (UserID, ModeType) с @ и без него, но это не работает.
Что мне не хватает?
Спасибо, я тоже пробовал начинать с 1 - com.microsoft.sqlserver.jdbc.SQLServerException: индекс 0 выходит за пределы допустимого диапазона.
если вы начинаете с 1, нет такой вещи, как индекс 0
Возможный дубликат Как выполнить хранимую процедуру MS SQL Server в java/jsp, возвращающую данные таблицы?




Вместо этого попробуйте следующее:
cs.setString(1, someUserID);
cs.setString(2, "0");
Я действительно пробовал это раньше. Я получаю ту же ошибку - com.microsoft.sqlserver.jdbc.SQLServerException: индекс 0 вне допустимого диапазона.
Тогда посмотрите некоторые рекомендации здесь: stackoverflow.com/questions/6113674/…
Я бы добавил: убедитесь, что вы действительно скомпилировали и развернули измененный код. Проанализируйте, в какой строке возникло исключение — если оно находится в первой строке cs.setString, возможно, у вас есть несоответствие между развернутым кодом и исходным кодом.
индексы начинаются с 1