共用方式為


處理複雜陳述式

下載 JDBC 驅動程式

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

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

當您知道所傳回物件或資料的類型時,可以使用 getResultSetgetUpdateCount 方法來處理該資料。 若要繼續處理從複雜陳述式傳回的下一個物件或資料,您可以呼叫 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();
    }
}

另請參閱

搭配 JDBC 驅動程式使用陳述式