다음을 통해 공유


복잡한 문 처리

JDBC 드라이버 다운로드

SQL Server용 Microsoft JDBC 드라이버를 사용하는 경우 런타임에 동적으로 생성되는 문을 포함하여 복잡한 문을 처리해야 할 수 있습니다. 복잡한 문은 대개 업데이트, 삽입, 삭제를 포함하여 다양한 작업을 수행합니다. 또한 이러한 유형의 문은 여러 결과 집합과 출력 매개 변수를 반환할 수 있습니다. 이러한 상황에서 문을 실행하는 Java 코드는 반환된 개체 및 데이터의 형식과 수를 미리 알지 못할 수 있습니다.

JDBC 드라이버는 복잡한 문을 처리하기 위해 반환되는 개체 및 데이터를 쿼리하는 다양한 메서드를 제공하여 애플리케이션에서 이를 올바르게 처리할 수 있도록 합니다. 복잡한 문을 처리하는 핵심은 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 드라이버와 함께 문 사용