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


Обработка сложных инструкций

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

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

Для обработки сложных инструкций драйвер JDBC предоставляет многочисленные методы запроса возвращаемых объектов и данных, что позволяет приложению правильно их обрабатывать. Ключевым моментом обработки сложных инструкций является вызов метода execute класса SQLServerStatement. Этот метод возвращает логическое значение. Значение true показывает, что первым из инструкции возвращается результирующий набор. Значение false показывает, что первым возвращается количество операций обновления.

Если известен тип возвращаемого объекта или данных, то для обработки этих данных можно использовать метод getResultSet или getUpdateCount. Чтобы перейти к обработке следующего объекта или набора данных, полученного от сложной инструкции, можно вызвать метод getMoreResults.

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

public static void executeComplexStatement(Connection con) {
    try (Statement stmt = con.createStatement();) {
        String sqlStringWithUnknownResults = "{call dbo.uspGetEmployeeManagers(50)}; SELECT TOP 10 * FROM Person.Contact";
        boolean results = stmt.execute(sqlStringWithUnknownResults);
        int count = 0;
        do {
            if (results) {
                ResultSet rs = stmt.getResultSet();
                System.out.println("Result set data displayed here.");
            }
            else {
                count = stmt.getUpdateCount();
                if (count >= 0) {
                    System.out.println("DDL or update data displayed here.");
                }
                else {
                    System.out.println("No more results to process.");
                }
            }
            results = stmt.getMoreResults();
        }
        while (results || count != -1);
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

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

Использование инструкций с JDBC Driver