</p> 不才面的实例中,将向此函数传递 AdventureWorks 示例数据库的打开毗连,然后使用 execute 体例挪用 GetImmediateManager 存储过程:
3 o2 v# R6 k! b# n" G * e& X S+ F& U" o9 j' ~
public static void executeStoredProcedure(Connection con) {
3 m( y* D% }, [0 `6 N. _ try {
/ X4 N2 A/ Y' {$ H2 I" m CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");5 K: f5 B2 {' N1 ~; k1 K! z
cstmt.setInt(1, 5);( S7 }1 b+ c) D6 J& E) A8 G/ c
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);8 ^& F9 Y2 Q3 |) w) O# Y1 M
cstmt.execute();8 x2 N, x0 _. [6 E) m
System.out.println("MANAGER ID: " + cstmt.getInt(2));- Z9 x ?) p6 Q; b0 [. H
}! Q. ~$ x0 P( m; ~) M* |! j
catch (Exception e) {
4 W- m$ @, b* t6 A) S- F- } e.printStackTrace();# m. D7 }7 U- C7 K4 _6 X
}
! d' ]2 D5 }6 j3 H% ~" ~# W; g }- s- U1 P1 N; Q$ }+ X1 ~( W$ D8 ^
本示例使用序号位置来标识参数。或者,也可以使用参数的名称(而非其序号位置)来标识此参数。下面的代码示例改削了上一个示例,以声名若何在 Java 应用轨范中使用命名参数。请注重,这些参数名称对应于存储过程的界说中的参数名称:& ~( F1 ?' w+ W8 M
public static void executeStoredProcedure(Connection con) {" o5 Q( N) e4 ?
try {8 Q5 C5 ~2 g, l
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");4 o4 F" W0 r0 r. o: f; M
cstmt.setInt("employeeID", 5);
; @' `1 _/ X7 J! d0 l cstmt.registerOutParameter("managerID", java.sql.Types.INTEGER);
; y; A, ^. @2 u* G- p cstmt.execute();& X( x W p: @2 F. f- ]+ ~
System.out.println("MANAGER ID: " + cstmt.getInt("managerID")); _8 D) `6 g/ \% C3 c
cstmt.close();4 l1 ~4 b( Z! C+ l ^2 x2 G9 k
}" ^6 D/ t+ ~/ r" Z. h) b5 s
catch (Exception e) {
! V. f0 v6 R: M2 N e.printStackTrace();, j( s" K2 i6 i6 T; ?9 ~" a _' I
}! p, d/ a+ w+ u" x7 V0 k$ a9 N
}8 n; i' Q6 B, N8 \; A$ ^
注重:. B# S% j. a- f' A5 h; J
这些示例使用 SQLServerCallableStatement 类的 execute 体例来运行存储过程。使用此体例是因为存储过程也不会返回结不美观集。如不美观返回,则使用 executeQuery 体例。
$ i) ~7 n& y2 t1 S2 P6 H 存储过程可能返回更新计数和多个结不美观集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 规范,此规范划定在检索 OUT 参数之前应检索多个结不美观集和更新计数。也就是说,应用轨范应先检索所有 ResultSet 对象和更新计数,然后使用 CallableStatement.getter 体例检索 OUT 参数。否则,当检索 OUT 参数时,尚未检索的 ResultSet 对象和更新计数将丢失踪。有关更新计数和多个结不美观集的具体信息,请参阅使用带有更新计数的存储过程和使用多个结不美观集。 |