다중 결과 집합 사용
둘 이상의 결과 집합을 반환하는 인라인 SQL 또는 SQL Server 저장 프로시저를 사용하는 경우 SQL Server용 Microsoft JDBC 드라이버는 반환된 각 데이터 집합을 검색할 수 있도록 SQLServerStatement 클래스에 getResultSet 메서드를 제공합니다. 또한 결과 집합을 둘 이상 반환하는 문을 실행하는 경우에는 SQLServerStatement 클래스의 execute 메서드를 사용합니다. 이는 반환된 값이 결과 집합인지 업데이트 횟수인지를 나타내는 부울 값을 반환합니다.
execute 메서드가 true를 반환하면 실행된 문이 하나 이상의 결과 집합을 반환합니다. getResultSet 메서드를 호출하면 첫 번째 결과 집합에 액세스할 수 있습니다. 결과 집합을 더 많이 사용할 수 있는지 확인하기 위해 getMoreResults 메서드를 호출하면, 결과 집합을 더 많이 사용할 수 있는 경우에는 true의 부울 값을 반환합니다. 결과 집합을 더 많이 사용할 수 있는 경우 getResultSet 메서드를 다시 호출하고 액세스하여 모든 결과 집합이 처리될 때까지 프로세스를 계속할 수 있습니다. getMoreResults 메서드가 false를 반환한다면 처리할 결과 집합이 없는 것입니다.
execute 메서드가 false를 반환하는 경우 실행된 문은 업데이트 수를 반환하며, 이는 getUpdateCount 메서드를 호출하여 검색할 수 있습니다.
참고 항목
업데이트 횟수에 대한 자세한 내용은 업데이트 횟수가 있는 저장 프로시저 사용을 참조 하세요.
다음 예제에서는 AdventureWorks2022 샘플 데이터베이스에 대한 열린 연결을 함수에 전달하고, 실행 시 두 개의 결과 집합을 반환하는 SQL 문을 생성합니다.
public static void executeStatement(Connection con) {
try (Statement stmt = con.createStatement();) {
String SQL = "SELECT TOP 10 * FROM Person.Contact; SELECT TOP 20 * FROM Person.Contact";
boolean results = stmt.execute(SQL);
int rsCount = 0;
// Loop through the available result sets.
do {
if (results) {
ResultSet rs = stmt.getResultSet();
rsCount++;
// Show data from the result set.
System.out.println("RESULT SET #" + rsCount);
while (rs.next()) {
System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
}
}
System.out.println();
results = stmt.getMoreResults();
} while (results);
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}
이 경우 반환되는 결과 집합 수는 2개로 알려져 있습니다. 하지만 저장 프로시저를 호출할 때와 같이 반환되는 결과 집합의 개수를 알 수 없는 경우 결과 집합을 모두 처리하도록 코드를 작성합니다. 업데이트 값과 함께 여러 결과 집합을 반환하는 저장 프로시저를 호출하는 예제를 보려면 복잡한 문 처리를 참조하세요.
참고 항목
SQLServerStatement 클래스의 getMoreResults 메서드를 호출하면 이전에 반환한 결과 집합은 암시적으로 닫힙니다.