Как вызвать хранимую процедуру MSSQL из java

Я пытаюсь вызвать хранимую процедуру из 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

fantaghirocco 05.02.2019 15:23

Спасибо, я тоже пробовал начинать с 1 - com.microsoft.sqlserver.jdbc.SQLServerException: индекс 0 выходит за пределы допустимого диапазона.

John Cressman 05.02.2019 15:47

если вы начинаете с 1, нет такой вещи, как индекс 0

fantaghirocco 05.02.2019 15:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
111
1

Ответы 1

Вместо этого попробуйте следующее:

cs.setString(1, someUserID);
cs.setString(2, "0");

Я действительно пробовал это раньше. Я получаю ту же ошибку - com.microsoft.sqlserver.jdbc.SQLServerException: индекс 0 вне допустимого диапазона.

John Cressman 05.02.2019 15:45

Тогда посмотрите некоторые рекомендации здесь: stackoverflow.com/questions/6113674/…

nullPointer 05.02.2019 15:55

Я бы добавил: убедитесь, что вы действительно скомпилировали и развернули измененный код. Проанализируйте, в какой строке возникло исключение — если оно находится в первой строке cs.setString, возможно, у вас есть несоответствие между развернутым кодом и исходным кодом.

Olaf Kock 06.02.2019 13:13

Другие вопросы по теме