使用含输入参数的存储过程

下载 JDBC 驱动程序

可以调用包含一个或多个 IN 参数的 SQL Server 存储过程,这些参数可用于向存储过程传递数据。 可以使用 Microsoft JDBC Driver for SQL Server 提供的 SQLServerPreparedStatement 类,调用此类存储过程并处理其返回的数据。

使用 JDBC 驱动程序调用带 IN 参数的存储过程时,必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。 带有 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();  
        }  
    }
}

另请参阅

结合使用语句和存储过程