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


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

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

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

После настройки вызова хранимой процедуры с помощью класса SQLServerCallableStatement можно вызывать эту хранимую процедуру с помощью метода execute или executeUpdate. Метод executeUpdate возвращает значение int, которое содержит количество строк, обработанных хранимой процедурой, а метод execute не возвращает это значение. Если используется метод execute и нужно получить количество обработанных строк, можно вызвать метод getUpdateCount после выполнения хранимой процедуры.

Примечание

Чтобы драйвер JDBC возвращал все счетчики обновления, включая счетчики, возвращенные сработавшими триггерами, установите свойство lastUpdateCount строки подключения в значение false. Дополнительные сведения о свойстве lastUpdateCount см. в статье Настройка свойств подключения.

Например, создайте следующую таблицу и хранимую процедуру, а также вставьте примеры данных в образец базы данных AdventureWorks2022:

CREATE TABLE TestTable
   (Col1 int IDENTITY,
    Col2 varchar(50),
    Col3 int);  

CREATE PROCEDURE UpdateTestTable  
   @Col2 varchar(50),  
   @Col3 int  
AS  
BEGIN  
   UPDATE TestTable  
   SET Col2 = @Col2, Col3 = @Col3  
END;  
INSERT INTO dbo.TestTable (Col2, Col3) VALUES ('b', 10);  

В следующем примере открытое подключение к образцу базы данных AdventureWorks2022 передается в функцию, метод execute используется для вызова хранимой процедуры UpdateTestTable, а затем метод getUpdateCount используется для возврата количества строк, затронутых хранимой процедурой.

public static void executeUpdateStoredProcedure(Connection con) {
    try(CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");) {
        cstmt.setString(1, "A");
        cstmt.setInt(2, 100);
        cstmt.execute();
        int count = cstmt.getUpdateCount();
        System.out.println("ROWS AFFECTED: " + count);
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

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

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