복잡한 문 처리
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();
}
}