2、調用帶有輸入參數的預存程序
使用 JDBC 驅動程式調用帶參數的預存程序時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 逸出序列。帶有 IN 參數的 call 逸出序列的文法如下所示:
{call procedure-name[([parameter][,[parameter]]...)]}
構造 call 逸出序列時,請使用 ?(問號)字元來指定 IN 參數。此字元充當要傳遞給該預存程序的參數值的預留位置。可以使用 SQLServerPreparedStatement 類的 setter 方法之一為參數指定值。可使用的 setter 方法由 IN 參數的資料類型決定。
向 setter 方法傳遞值時,不僅需要指定要在參數中使用的實際值,還必須指定參數在預存程序中的序數位置。例如,如果預存程序包含單個 IN 參數,則其序數值為 1。如果預存程序包含兩個參數,則第一個序數值為 1,第二個序數值為 2。
作為如何調用包含 IN 參數的預存程序的執行個體,使用 SQL Server 2005 AdventureWorks 樣本資料庫中的 uspGetEmployeeManagers 預存程序。此預存程序接受名為 EmployeeID 的單個輸入參數(它是一個整數值),然後基於指定的 EmployeeID 返回僱員及其經理的遞迴列表。下面是調用此預存程序的 Java 代碼:
Java code:
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();
}
}
轉自:http://www.cn-java.com/www1/?action-viewnews-itemid-55626