使用會傳回多個結果集的內嵌 SQL 或 SQL Server 預存程序時,Microsoft SQL Server 2005 JDBC Driver 在 SQLServerStatement 類別中提供了 getResultSet 方法,可用於擷取每個結果集所傳回的資料。此外,執行會傳回多個結果集的陳述式時,您還可以使用 SQLServerStatement 類別的 execute 方法,因為它會傳回 boolean 值,指出所傳回的值是結果集還是更新計數。
如果 execute 方法傳回 true,表示執行的陳述式傳回的是一或多個結果集。呼叫 getResultSet 方法,即可存取第一個結果集。若要判斷是否有多個結果集可供使用,可呼叫 getMoreResults 方法,如果有多個可用的結果集,則這個方法會傳回值為 true 的 boolean 值。如果有多個結果集可供使用,您可以再次呼叫 getResultSet 方法進行存取,持續進行這個程序一直到處理完所有結果集為止。如果 getMoreResults 方法傳回 false,表示已沒有需要處理的結果集。
如果 execute 方法傳回 false,表示執行的陳述式傳回的是更新計數值,而您可以呼叫 getUpdateCount 方法來擷取該值。
注意
如需更新計數的詳細資訊,請參閱<使用預存程序與更新計數>。
在下列範例中,連至 SQL Server AdventureWorks 範例資料庫的開啟連接會傳遞至函數,並建構了一個 SQL 陳述式,執行時會傳回兩個結果集:
public static void executeStatement(Connection con) {
try {
String SQL = "SELECT TOP 10 * FROM Person.Contact; _" +
"SELECT TOP 20 * FROM Person.Contact";
Statement stmt = con.createStatement();
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"));
}
rs.close();
}
System.out.println();
results = stmt.getMoreResults();
} while(results);
stmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
在此例中,已知傳回的結果集數量為二。不過,即使傳回未知數量的結果集 (例如呼叫預存程序時),此程式碼的撰寫方式仍可處理所有的結果集。若要查看呼叫會傳回多個結果集與更新值的預存程序範例,請參閱<處理複雜陳述式>。
注意
當您呼叫 SQLServerStatement 類別的 getMoreResults 方法時,先前傳回的結果集將會隱含地關閉。