java 调用存储过程
1、使用不带参数的存储过程
使用 jdbc 驱动程序调用不带参数的存储过程时,必须使用 call sql 转义序列。不带参数的 call 转义序列的语法如下所示:
{call procedure-name} 作为实例,在 sql server 2005 adventureworks 示例数据库教程中创建以下存储过程:
以下是引用片段:
create procedure getcontactformalnames
as
begin
select top 10 title + ' ' + firstname + ' ' + lastname as formalname
from person.contact
end
此存储过程返回单个结果集,其中包含一列数据(由 person.contact 表中前十个联系人的称呼、名称和姓氏组成)。
在下面的实例中,将向此函数传递 adventureworks 示例数据库的打开连接,然后使用 executequery 方法调用 getcontactformalnames 存储过程。
以下是引用片段:
public static void executesprocnoparams(connection con) ...{
try ...{
statement stmt = con.createstatement();
resultset 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 转义序列的语法如下所示:{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 代码:
public static void executesprocinparams(connection con) ...{
try ...{
preparedstatement ps教程tmt = 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();
}
}
首页 1 2 3 末页