使用 JDBC 驅動程式調用這種預存程序時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 逸出序列。返回狀態參數的 call 逸出序列的文法如下所示:
{[?=]call procedure-name[([parameter][,[parameter]]...)]}
構造 call 逸出序列時,請使用 ?(問號)字元來指定返回狀態參數。此字元充當要從該預存程序返回的參數值的預留位置。要為返回狀態參數指定值,必須在執行預存程序前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定參數的資料類型。
此外,向 registerOutParameter 方法傳遞返回狀態參數值時,不僅需要指定要使用的參數的資料類型,還必須指定參數在預存程序中的序數位置。對於返回狀態參數,其序數位置始終為 1,這是因為它始終是調用預存程序時的第一個參數。儘管 SQLServerCallableStatement 類支援使用參數的名稱來指示特定參數,但您只能對返回狀態參數使用參數的序號位置編號。
作為執行個體,在 SQL Server 2005 AdventureWorks 樣本資料庫中建立以下預存程序:
SQL code:
CREATE PROCEDURE CheckContactCity
(@cityName CHAR(50))
AS
BEGIN
IF ((SELECT COUNT(*)
FROM Person.Address
WHERE City = @cityName) > 1)
RETURN 1
ELSE
RETURN 0
END
該預存程序返回狀態值 1 或 0,這取決於是否能在表 Person.Address 中找到 cityName 參數指定的城市。
在下面的執行個體中,將向此函數傳遞 AdventureWorks 樣本資料庫的開啟串連,然後使用 execute 方法調用 CheckContactCity 預存程序:
Java codepublic static void executeStoredProcedure(Connection con) {
try {
CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");
cstmt.registerOutParameter(1, Java.sql.Types.INTEGER);
cstmt.setString(2, "Atlanta");
cstmt.execute();
System.out.println("RETURN STATUS: " + cstmt.getInt(1));
}
cstmt.close();
catch (Exception e) {
e.printStackTrace();
}
}
轉自:http://www.cn-java.com/www1/?action-viewnews-itemid-55626