處理複雜陳述

下載 JDBC 驅動程式

使用適用於 SQL Server 的 Microsoft JDBC 驅動程式時,您可能必須處理複雜陳述式,包括在執行階段動態產生的陳述式。 複雜陳述式通常執行不同類型的工作,包括更新、插入和刪除。 這些類型的陳述式也可能傳回多個結果集和輸出參數。 在這些情況下,執行陳述式的 Java 程式碼事先可能不知道傳回的物件和資料的類型和數目。

為了處理複雜陳述式,JDBC 驅動程式提供許多方法來查詢傳回的物件和資料,使應用程式可以正確處理它們。 處理複雜陳述式的關鍵在於 SQLServerStatement 類別的 execute 方法。 此方法會傳回布林值。 若此值為 true,則從陳述式傳回的第一個結果是結果集。 如果值為 false,則傳回的第一個結果是更新計數。

當您知道所傳回物件或資料的類型時,可以使用 getResultSet 或 getUpdateCount 方法來處理該資料。 若要繼續處理從複雜陳述式傳回的下一個物件或資料,您可以呼叫 getMoreResults 方法。

在以下範例中,將 AdventureWorks2025 範例資料庫的開放連線傳遞到函式,建構一個複雜陳述式,結合儲存程序呼叫與 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();
    }
}