共用方式為


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

下載 JDBC 驅動程式

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

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

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

注意

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

當你構造 call 轉義序列時,請使用 ? (問號)字元指定 IN 參數。 此字元作為傳送到儲存程序的參數值的佔位符。 若要指定參數的值,您可以使用 SQLServerPreparedStatement 類別的其中一個 setter 方法。 IN參數的資料型態決定了你可以使用的設定器方法。

當你把值傳給設定器方法時,你不僅必須指定該參數實際使用的值,還必須指定該參數在儲存程序中的序數位置。 例如,如果你的儲存程序只包含一個 IN 參數,其序數值為 1。 如果預存程序包含兩個參數,則第一個序數值為 1,而第二個序數值會是 2。

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

public static void executeSprocInParams(Connection con) throws SQLException {  
    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();  
        }  
    }
}

另請參閱

使用帶有儲存程序的語句準備語句參數效能