编写存储过程并使用java代码调用

--编写存储过程向数据库中的book表中插入一条数据

create or replace procedure sp_pro7
(spBookId in number,spBookName in varchar2,spPublish in varchar2) is
begin
insert into book values(spBookId,spBookName,spPublish);
end;
--使用java代码调用存储过程

 

package test;
import java.sql.*;
public class TestOracle{
 //定义Connection对象
 public static Connection conn = null;
 //定义CallableStatement对象
 public static CallableStatement cs = null;
 public static void main(String[] args){
   try{
   //1、加载Oracle驱动
   Class.forName("oracle.jdbc.driver.OracleDriver");
   //2、取得数据库连接
   conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
   //3、实例化CallableStatement对象
   cs = conn.prepareCall("{call sp_pro7(?,?,?)}");
   //4、给?赋值
   cs.setInt(1,10);
   cs.setString(2,"笑傲江湖");
   cs.setString(3,"人民出版社");
   //5、执行
   cs.execute();
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(cs!=null){
     cs.close();
     cs = null;
    }
   }catch(Exception e1){
    e1.printStackTrace();
   }finally{
    try{
     if(conn!=null){
      conn.close();
      conn = null;
     }
    }catch(Exception e2){
     e2.printStackTrace();
    }
   }
  }
 }
}

--编写有输入和输出参数的过程

--编写一个有输入和输出的存储过程
create or replace procedure sp_pro8
(spNo in number,spName out varchar2) is
begin
select ename into spName from emp where empno=spNo;
end;

--使用java代码调用该存储过程并打印输出得到的结果集

package test;
import java.sql.*;
public class TestOracle{
 //定义Connection对象
 public static Connection conn = null;
 //定义CallableStatement对象
 public static CallableStatement cs = null;
 public static void main(String[] args){
   try{
   //1、加载Oracle驱动
   Class.forName("oracle.jdbc.driver.OracleDriver");
   //2、取得数据库连接
   conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
   //3、实例化CallableStatement对象
   cs = conn.prepareCall("{call sp_pro8(?,?)}");
   //4、给?赋值
   cs.setInt(1,7788);
   //5、给第二个?赋值
   cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR);
   //6、执行
   cs.execute();
   //7、获取返回的值,注意返回值是第二个,此处必须写2
   String name = cs.getString(2);
   //8、打印输出取得的值
   System.out.println("7788号员工的姓名是:" + name);
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(cs!=null){
     cs.close();
     cs = null;
    }
   }catch(Exception e1){
    e1.printStackTrace();
   }finally{
    try{
     if(conn!=null){
      conn.close();
      conn = null;
     }
    }catch(Exception e2){
     e2.printStackTrace();
    }
   }
  }
 }
}

=========多个输出参数和一个输入参数的存储过程===

--编写一个存储过程,使用多个输出参数接收变量
create or replace procedure sp_pro9
(spNo in number,spName out varchar2,spSal out number,spJob out varchar2) is
begin
select ename,sal,job into spName,spSal,spJob from emp where empno=spNo;
end;

==java代码调用

package test;
import java.sql.*;
public class TestOracle{
 //定义Connection对象
 public static Connection conn = null;
 //定义CallableStatement对象
 public static CallableStatement cs = null;
 public static void main(String[] args){
   try{
   //1、加载Oracle驱动
   Class.forName("oracle.jdbc.driver.OracleDriver");
   //2、取得数据库连接
   conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
   //3、实例化CallableStatement对象
   cs = conn.prepareCall("{call sp_pro9(?,?,?,?)}");
   //4、给?赋值
   cs.setInt(1,7788);
   //5、给第二个?赋值
   cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR);
   //5、给第三个?赋值
   cs.registerOutParameter(3,oracle.jdbc.OracleTypes.DOUBLE);
   //6、给第四个?赋值
   cs.registerOutParameter(4,oracle.jdbc.OracleTypes.VARCHAR);
   //7、执行
   cs.execute();
   //8、获取返回的值,注意返回值是第二个,此处必须写2
   String name = cs.getString(2);
   double sal = cs.getDouble(3);
   String job = cs.getString(4);
   //9、打印输出取得的值
   System.out.println("7788号员工的姓名是:" + name + ",工资是:" + sal + ",职位是:" +job);
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(cs!=null){
     cs.close();
     cs = null;
    }
   }catch(Exception e1){
    e1.printStackTrace();
   }finally{
    try{
     if(conn!=null){
      conn.close();
      conn = null;
     }
    }catch(Exception e2){
     e2.printStackTrace();
    }
   }
  }
 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值