使用 Microsoft SQL Server 2005 JDBC Driver 時,可能必須處理複雜陳述式,包括在執行階段動態產生的陳述式。複雜陳述式通常執行各種不同的工作,包括更新、插入與刪除。這些類型的陳述式也可能傳回多個結果集和輸出參數。在這些情況下,執行陳述式的 Java 程式碼事先可能不知道傳回的物件和資料的類型和數目。
為了有效處理複雜陳述式,JDBC 驅動程式提供一些方法來查詢傳回的物件和資料,使應用程式可以正確處理它們。處理複雜陳述式的關鍵在於 SQLServerStatement 類別的 execute 方法。此方法會傳回 boolean 值。若此值為 true,則從陳述式傳回的第一個結果是結果集。當此值為 false,則傳回的第一個結果是更新計數。
當您知道傳回的物件或資料的類型時,可使用 getResultSet 或 getUpdateCount 方法來處理該資料。若要處理從複雜陳述式傳回的下一個物件或資料,您可以呼叫 getMoreResults 方法。
在下列範例中,連至 SQL Server 2005 AdventureWorks 範例資料庫的開啟連接會傳遞至函數中,建構一個結合預存程序呼叫與 SQL 陳述式的複雜陳述式,接著執行陳述式,然後使用 do 迴圈來處理傳回的所有結果集和更新的計數。
public static void executeComplexStatement(Connection con) {
try {
String sqlStringWithUnknownResults = "{call dbo.uspGetEmployeeManagers(50)};SELECT TOP 10 * FROM Person.Contact";
Statement stmt = con.createStatement();
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);
rs.close();
stmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}