Java中五中常用的调用存储过程方法

来源:互联网 发布:js设置radio不可用 编辑:程序博客网 时间:2024/05/20 07:34

  共五个例子,几乎包含了我们常用的调用存储过程,有不懂的可以下面跟帖留言

  一:无返回值的存储过程

  存储过程为:

  CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS

  BEGIN

  INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);

  END TESTA;

  复制代码

  然后呢,在java里调用时就用下面的代码:

  public class TestProcedureOne {

  public TestProcedureOne() {

  }

  public static void main(String[] args ){

  String driver = "oracle.jdbc.driver.OracleDriver";

  String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";

  Statement stmt = null;

  ResultSet rs = null;

  Connection conn = null;

  CallableStatement cstmt = null;

  try {

  Class.forName(driver);

  conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");

  CallableStatement proc = null;

  proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");

  proc.setString(1, "100");

  proc.setString(2, "TestOne");

  proc.execute();

  }

  catch (SQLException ex2) {

  ex2.printStackTrace();

  }

  catch (Exception ex2) {

  ex2.printStackTrace();

  }

  finally{

  try {

  if(rs != null){

  rs.close();

  if(stmt!=null){

  stmt.close();

  }

  if(conn!=null){

  conn.close();

  }

  }

  }

  catch (SQLException ex1) {

  }

  }

  }

  }

  复制代码

  下面是有返回值的存储过程

  例子1:调用有返回值的存储过程

  import java.sql.CallableStatement;

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.SQLException;

  public class TestProc {

  private static Connection connection = null;

  public static ConnectiongetConnection(){

  try {

  Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

  connection =DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");

  } catch (ClassNotFoundExceptione) {

  e.printStackTrace();

  } catch (SQLException e){

  e.printStackTrace();

  }

  return connection;

  }

  public static void main(String[] args) {

  Connection connection =TestProc.getConnection();

  try{

  StringpoetName = "silas";

  int id =0;

  //设置调用的存储过程名及参数情况

  CallableStatementproc = connection.prepareCall("{ call test_proc(?, ?) }");

  //设置输入参数值1的值

  proc.setString(1,poetName);

  //设置输出参数及返回类型

  proc.registerOutParameter(2,java.sql.Types.INTEGER);

  proc.execute();

  //取出存储过程的返回值

  id =proc.getInt(2);

  System.out.println("人员ID为:"+id);

  connection.close();

  }catch (SQLException e){

  e.printStackTrace();

  }

  复制代码

  // 以下为存储过程的定义

  // create proc test_proc

  // @usernamevarchar(20),@pid int output

  // as

  // declare@uid int

  // set @uid =0

  // select@uid=userid from users where username=@username

  // if@uid<>0

  // set @pid = @uid

  // else

  // set @pid = 0

  }

  }

  复制代码

  当前以上存储过程中调用了users表,此处建表省略.

  例子2:调用返回结果集的存储过程

  import java.sql.CallableStatement;

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.ResultSet;

  import java.sql.SQLException;

  public class TestProcResultSet {

  private static Connection connection = null;

  public static ConnectiongetConnection(){

  try {

  Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

  connection =DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");

  } catch (ClassNotFoundExceptione) {

  e.printStackTrace();

  } catch (SQLException e){

  e.printStackTrace();

  }

  return connection;

  }

  public static void main(String[] args) {

  Connection connection =TestProc.getConnection();

  try{

  ResultSet rs= null;

  //设置调用的存储过程名及参数情况,注意的是存储过程不可以有输出参数

  CallableStatementproc = connection.prepareCall("{ calltest_proc_resultset(?)}");

  //设置输入参数

  proc.setInt(1,11);

  //调入存储过程

  proc.execute();

  //取出存储过程的结果集

  rs =proc.getResultSet();

  for(inti=0;rs.next();i++)

  System.out.println("Result的大小为:"+rs.getString(2));

  connection.close();

  }catch (SQLException e){

  e.printStackTrace();

  }

  // create proctest_proc_resultset

  // @id int

  // as

  // select * from users where userid=@id

  }

  }

  复制代码

  例子3:调用有默认值的存储过程

  import java.sql.CallableStatement;

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.SQLException;

  public class TestDefaultProc {

  private static Connection connection = null;

  public static ConnectiongetConnection(){

  try {

  Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

  connection =DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");

  } catch (ClassNotFoundExceptione) {

  e.printStackTrace();

  } catch (SQLException e){

  e.printStackTrace();

  }

  return connection;

  }

  public static void main(String[] args) {

  Connection connection =TestDefaultProc.getConnection();

  try{

  int id =0;

  //设置调用的存储过程名及默认参数的情况

  CallableStatementproc = connection.prepareCall("{ call test_default_proc(default, ?)}");

  //设置输出参数及返回类型

  proc.registerOutParameter(1,java.sql.Types.INTEGER);

  proc.execute();

  //取出存储过程的返回值

  id =proc.getInt(1);

  System.out.println("人员ID为:"+id);

  connection.close();

  }catch (SQLException e){

  e.printStackTrace();

  }

  复制代码

  // 以下为存储过程的定义

  // create proctest_default_proc

  // @usernamevarchar(20)='silas',@pid int output

  // as

  // declare@uid int

  // set @uid =0

  // select@uid=userid from users where username=@username

  // if@uid<>0

  // set @pid = @uid

  // else

  // set @pid = 0

  }

  复制代码

  例子4:调用返回两个以上结果集的存储过程(重点)

  import java.sql.CallableStatement;

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.ResultSet;

  import java.sql.SQLException;

  public class TestProcMulResultSet {

  private static Connection connection = null;

  public static ConnectiongetConnection(){

  try {

  Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

  connection =DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");

  } catch (ClassNotFoundExceptione) {

  e.printStackTrace();

  } catch (SQLException e){

  e.printStackTrace();

  }

  return connection;

  }

  public static void main(String[] args) {

  Connection connection =TestProc.getConnection();

  try{

  ResultSet rs= null;

  //设置调用的存储过程名及参数情况,注意的是存储过程不可以有输出参数

  CallableStatementproc = connection.prepareCall("{ calltest_proc_mulresultset(?)}");

  //设置输入参数

  proc.setInt(1,11);

  //调入存储过程

  proc.execute();

  //取出存储过程的结果集

  booleanhasResult = true;

  while (hasResult) {

  rs = proc.getResultSet();

  while(rs.next()) {

  System.out.println("第一条记录第二个字段值为:"+rs.getString(2));

  break;

  }

  hasResult = proc.getMoreResults();

  }

  connection.close();

  }catch (SQLException e){

  e.printStackTrace();

  }

  复制代码

  // create proctest_proc_mulresultset

  // @id int

  // as

  // select * from users where userid=@id

  // select * from users order by userid desc

  }

  }

  复制代码

  以上四个例子仅做参考.

0 0