共用方式為


處理複雜陳述式

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

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

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

另請參閱

其他資源

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