Поделиться через


Использование хранимых процедур с входными параметрами

Скачать драйвер JDBC

Хранимая процедура SQL Server, которую вы можете вызывать, содержит один или несколько параметров IN, используемых для передачи данных в эту хранимую процедуру. Microsoft JDBC Driver для SQL Server предоставляет класс SQLServerPreparedStatement, который можно использовать для вызова этого типа хранимой процедуры и обработки возвращаемых ею данных.

При использовании драйвера JDBC для вызова хранимой процедуры с параметрами IN следует использовать escape-последовательность SQL call вместе с методом prepareCall класса SQLServerConnection. Ниже приводится синтаксис escape-последовательности call с параметрами IN.

{call procedure-name[([parameter][,[parameter]]...)]}

Примечание

Дополнительные сведения об использовании escape-последовательностей в SQL см. в этой статье.

При создании escape-последовательности call укажите параметры IN при помощи (символ вопросительного знака (?)). Этот символ выполняет роль заполнителя для значений параметра, которые будут переданы хранимой процедуре. Чтобы указать значение для параметра, можно использовать один из методов задания из класса SQLServerPreparedStatement. Метод задания, который можно использовать, определяется типом данных параметра IN.

Во время передачи значения методу задания следует указать не только фактическое значение, которое будет использоваться в параметре, но также порядковый номер параметра в хранимой процедуре. Например, если хранимая процедура содержит единственный параметр IN, его порядковый номер будет 1. Если хранимая процедура содержит два параметра, порядковый номер первого значения будет 1, а второго — 2.

В качестве примера вызова хранимой процедуры, содержащей параметр IN, используйте хранимую процедуру uspGetEmployeeManagers в образце базы данных AdventureWorks2022. Эта хранимая процедура принимает один параметр входных данных с именем EmployeeID, который является целым значением, и возвращает рекурсивный список служащих и их менеджеров на основе указанного EmployeeID. Ниже приводится код Java для вызова этой хранимой процедуры.

public static void executeSprocInParams(Connection con) throws SQLException {  
    try(PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}"); ) {  

        pstmt.setInt(1, 50);  
        ResultSet rs = pstmt.executeQuery();  

        while (rs.next()) {  
            System.out.println("EMPLOYEE:");  
            System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));  
            System.out.println("MANAGER:");  
            System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));  
            System.out.println();  
        }  
    }
}

См. также раздел

Использование инструкций с хранимыми процедурами