Share via


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

下載 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 方法。 您可以使用的 setter 方法是由 IN 參數的資料類型決定。

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

如需如何呼叫包含 IN 參數的預存程序範例,請在 AdventureWorks2022 範例資料庫中使用 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();  
        }  
    }
}

另請參閱

搭配預存程序使用陳述式