共用方式為


使用含有輸入參數的預存程序

您可以呼叫的 SQL Server 預存程序包含一或多個 IN 參數,這些是可以用來傳遞資料給預存程序的參數。Microsoft SQL Server 2005 JDBC Driver 提供 SQLServerPreparedStatement 類別,您可以使用此類別,呼叫此種預存程序並處理其傳回的資料。

當您使用 JDBC 驅動程式呼叫含有 IN 參數的預存程序時,必須使用callSQL 逸出序列與 SQLServerConnection 類別的 prepareCall 方法搭配。含有 IN 參數之call逸出序列的語法如下:

{call procedure-name[([parameter][,[parameter]]...)]}

注意

如需 SQL 逸出序列的詳細資訊,請參閱<使用 SQL 逸出序列>。

建構call逸出序列時,請使用 ? (問號) 字元來指定 IN 參數。此字元會充當預留位置,代表將傳入預存程序的參數值。若要指定參數的值,您可以使用 SQLServerPreparedStatement 類別的其中一個 setter 方法。您可以使用的 setter 方法是由 IN 參數的資料類型決定。

當您將值傳遞至 setter 方法時,您不但要指定將用於參數中的實際值,還要指定預存程序中參數的序數位置。例如,如果預存程序包含單一 IN 參數,其序數值將會是 1。如果預存程序包含兩個參數,則第一個序數值將會是 1,第二個序數值則會是 2。

如需如何呼叫包含 IN 參數的預存程序範例,請在 SQL Server 2005 AdventureWorks 範例資料庫中使用 uspGetEmployeeManagers 預存程序。此預存程序接受單一輸入參數 EmployeeID,它是一個整數值,並以指定的 EmployeeID 為基礎,傳回含有員工及其經理的遞迴式清單。呼叫此預存程序的 Java 程式碼如下:

public static void executeSprocInParams(Connection con) {
   try {
      PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}");
      pstmt.setInt(1, 50);
      ResultSet rs = pstmt.executeQuery();

      while (rs.next()) {
         System.out.println("EMPLOYEE:");
         System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
         System.out.println("MANAGER:");
         System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));
         System.out.println();
      }
      rs.close();
      pstmt.close();
   }

   catch (Exception e) {
      e.printStackTrace();
    }
}

另請參閱

其他資源

搭配預存程序使用陳述式