處理複雜陳述式
使用適用於 SQL Server 的 Microsoft JDBC 驅動程式時,您可能必須處理複雜陳述式,包括在執行階段動態產生的陳述式。 複雜陳述式通常執行不同類型的工作,包括更新、插入和刪除。 這些類型的陳述式也可能傳回多個結果集和輸出參數。 在這些情況下,執行陳述式的 Java 程式碼事先可能不知道傳回的物件和資料的類型和數目。
為了處理複雜陳述式,JDBC 驅動程式提供許多方法來查詢傳回的物件和資料,使應用程式可以正確處理它們。 處理複雜陳述式的關鍵在於 SQLServerStatement 類別的 execute 方法。 此方法會傳回布林值。 若此值為 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();
}
}