使用多個結果集
使用會傳回多個結果集的內嵌 SQL 或 SQL Server 預存程序時,Microsoft JDBC Driver for SQL Server 在 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();
}
}
在此例中,已知傳回的結果集數量為二。 不過,即使傳回未知數量的結果集 (例如呼叫預存程序時),此程式碼的撰寫方式仍可處理所有的結果集。 若要查看呼叫會傳回多個結果集與更新值的預存程序範例,請參閱處理複雜陳述式。
注意
當您呼叫 SQLServerStatement 類別的 getMoreResults 方法時,先前傳回的結果集會以隱含方式關閉。