当前位置:编程学习 > JSP >>

java 调用存储过程详解与实例(1/3)

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
补充:Jsp教程,Java基础 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,