Java调用SQL Server的存储过程详解

上传人:cn****1 文档编号:486513150 上传时间:2023-03-29 格式:DOCX 页数:9 大小:14.22KB
返回 下载 相关 举报
Java调用SQL Server的存储过程详解_第1页
第1页 / 共9页
Java调用SQL Server的存储过程详解_第2页
第2页 / 共9页
Java调用SQL Server的存储过程详解_第3页
第3页 / 共9页
Java调用SQL Server的存储过程详解_第4页
第4页 / 共9页
Java调用SQL Server的存储过程详解_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《Java调用SQL Server的存储过程详解》由会员分享,可在线阅读,更多相关《Java调用SQL Server的存储过程详解(9页珍藏版)》请在金锄头文库上搜索。

1、Java调用SQL Server的存储过程详解2008年12月29日 星期一 17:45转自:天极网1使用不带参数的存储过程使用JDBC驱动程序调用不带参数的存储过程时,必须使用call SQL转义 序列。不带参数的call转义序列的语法如下所示:以下是引用片段:(call procedure-name作为实例,在SQL Server 2005 AdventureWorks示例数据库中创建以下存 储过程:以下是引用片段:CREATE PROCEDURE GetContactFormalNamesASBEGINSELECT TOP 10 Title + + FirstName + + LastN

2、ameAS FormalName FROM Person.Contact END此存储过程返回单个结果集,其中包含一列数据(由Person.Contact表中前十 个联系人的称呼、名称和姓氏组成)。在下面的实例中,将向此函数传递AdventureWorks示例数据库的打开连 接,然后使用executeQuery方法调用GetContactFormalNames存储过程。以下是引用片段:public static void executeSprocNoParams(Connection con) .( try .(Statement stmt = con.createStatement();Re

3、sultSet rs = stmt.executeQuery(call dbo.GetContactFormalNames);while (rs.next() .(System.out.println(rs.getString(FormalName); rs.close();stmt.close();catch (Exception e) .e.printStackTrace();2使用带有输入参数的存储过程使用JDBC驱动程序调用带参数的存储过程时,必须结合SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。带有IN参数的call转义序

4、列的语法如下所示:以下是引用片段:(call procedure-name(parameter,parameter.)构造call转义序列时,请使用?(问号)字符来指定IN参数。此字符充当 要传递给该存储过程的参数值的占位符。可以使用 SQLServerPreparedStatement类的setter方法之一为参数指定值。可使用的 setter方法由IN参数的数据类型决定。向setter方法传递值时,不仅需要指定要在参数中使用的实际值,还必须 指定参数在存储过程中的序数位置。例如,如果存储过程包含单个IN参数,则 其序数值为1。如果存储过程包含两个参数,则第一个序数值为1,第二个序数 值为2

5、。作为如何调用包含IN参数的存储过程的实例,使用SQL Server 2005 AdventureWorks示例数据库中的uspGetEmployeeManagers存储过程。此存储 过程接受名为EmployeeID的单个输入参数(它是一个整数值),然后基于指定的 EmployeeID返回雇员及其经理的递归列表。下面是调用此存储过程的Java代 码:以下是引用片段:public static void executeSprocInParams(Connection con) .( try .(PreparedStatement pstmt = con.prepareStatement(call

6、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(

7、ManagerFirstName);System.out.println();rs.close();pstmt.close();catch (Exception e) .e.printStackTrace();3使用带有输出参数的存储过程使用JDBC驱动程序调用此类存储过程时,必须结合SQLServerConnection 类的prepareCall方法使用call SQL转义序列。带有OUT参数的call转义 序列的语法如下所示:以下是引用片段:(call procedure-name(parameter,parameter.)构造call转义序列时,请使用?(问号)字符来指定OUT参数。此

8、字符充 当要从该存储过程返回的参数值的占位符。要为OUT参数指定值,必须在运行 存储过程前使用 SQLServerCallableStatement 类的 registerOutParameter 方法指定各参数的数据类型。使用registerOutParameter方法为OUT参数指定的值必须是 java.sql.Types所包含的JDBC数据类型之一,而它又被映射成本地SQL Server数据类型之一。有关JDBC和SQL Server数据类型的详细信息,请参 阅了解JDBC驱动程序数据类型。当您对于OUT参数向registerOutParameter方法传递一个值时,不仅必 须指定要用于

9、此参数的数据类型,而且必须在存储过程中指定此参数的序号位置 或此参数的名称。例如,如果存储过程包含单个OUT参数,则其序数值为1; 如果存储过程包含两个参数,则第一个序数值为1,第二个序数值为2。作为实例,在SQL Server 2005 AdventureWorks示例数据库中创建以下存储过程:根据指定的整数IN参数(employeelD),该存储过程也返回单个整数 OUT 参数(managerlD)。根据 HumanResources.Employee 表中包含的 EmployeelD, OUT参数中返回的值为ManagerID。在下面的实例中,将向此函数传递AdventureWorks示

10、例数据库的打开连 接,然后使用execute方法调用GetImmediateManager存储过程:以下是引用片段:public static void executeStoredProcedure(Connection con) .(try .(CallableStatement cstmt = con.prepareCall(calldbo.GetImmediateManager(?, ?);cstmt.setInt(1, 5);cstmt.registerOutParameter(2, java.sql.Types.INTEGER);cstmt.execute();System.out.

11、println(MANAGER ID: + cstmt.getInt(2);catch (Exception e) .e.printStackTrace();本示例使用序号位置来标识参数。或者,也可以使用参数的名称(而非其序号位 置)来标识此参数。下面的代码示例修改了上一个示例,以说明如何在Java应 用程序中使用命名参数。请注意,这些参数名称对应于存储过程的定义中的参数 名称: CREATE PROCEDURE GetImmediateManager以下是引用片段:employeeID INT,managerID INT OUTPUTASBEGINSELECT managerID = Man

12、agerIDFROM HumanResources.EmployeeWHERE EmployeeID = employeeIDEND存储过程可能返回更新计数和多个结果集。Microsoft SQL Server 2005 JDBC Driver遵循JDBC 3.0规范,此规范规定在检索OUT参数之前应检索多个结果 集和更新计数。也就是说,应用程序应先检索所有ResultSet对象和更新计数, 然后使用CallableStatement.getter方法检索OUT参数。否则,当检索OUT 参数时,尚未检索的ResultSet对象和更新计数将丢失。4使用带有返回状态的存储过程使用JDBC驱动程序调

13、用这种存储过程时,必须结合SQLServerConnection 类的prepareCall方法使用call SQL转义序列。返回状态参数的call转义 序列的语法如下所示:以下是引用片段:(?=call procedure-name(parameter,parameter.)构造call转义序列时,请使用?(问号)字符来指定返回状态参数。此字符充当 要从该存储过程返回的参数值的占位符。要为返回状态参数指定值,必须在执行 存储过程前使用 SQLServerCallableStatement 类的 registerOutParameter 方法指定参数的数据类型。此外,向registerOutP

14、arameter方法传递返回状态参数值时,不仅需要指 定要使用的参数的数据类型,还必须指定参数在存储过程中的序数位置。对于返 回状态参数,其序数位置始终为1,这是因为它始终是调用存储过程时的第一个 参数。尽管SQLServerCallableStatement类支持使用参数的名称来指示特定参 数,但您只能对返回状态参数使用参数的序号位置编号。作为实例,在SQL Server 2005 AdventureWorks示例数据库中创建以下存 储过程:以下是引用片段:CREATE PROCEDURE CheckContactCity(cityName CHAR(50)ASBEGINIF (SELECT

15、 COUNT(*)FROM Person.AddressWHERE City = cityName) 1)RETURN 1ELSERETURN 0END该存储过程返回状态值1或0,这取决于是否能在表Person.Address中找到 cityName参数指定的城市。在下面的实例中,将向此函数传递AdventureWorks示例数据库的打开连 接,然后使用execute方法调用CheckContactCity存储过程:以下是引用片段:public static void executeStoredProcedure(Connection con) .(try .(CallableStatement cstmt = con.prepareCall(? = calldbo.CheckContactCity(?);cstmt.registerOutParameter(1, java.sql.Types.INTEGER);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号