【存储过程】 在java语言中调用存储过程

来源:互联网 发布:阿里云虚拟内存不足 编辑:程序博客网 时间:2024/04/30 18:57
首先一定要连接数据库啊  private static Connection conn;      static{          //第一步:加载驱动              try {                  Class.forName("oracle.jdbc.driver.OracleDriver");                  //得到连接对象        conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","scott");              } catch (ClassNotFoundException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              } catch (SQLException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }      }  实例一:  【  create or replace procedure selectEmp(emp_no in number,ename out varchar2,job out varchar2,sal out number,deptno out number) is  begin  select ename,job,sal,deptno into ename,job,sal,deptno from emp where empno=emp_no;  end selectEmp;  】  //调用存储过程      public static void procedure() throws SQLException{          //创建CallableStatement  参数in  out  通过占位符传值          CallableStatement cas=conn.prepareCall("{call  selectEmp(?,?,?,?,?)}");          //从1开始          int index = 1;          //为占位符赋值          cas.setInt(index++, 7369);//赋值的是输入参数          //输出参数          cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);          cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.VARCHAR);          cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);          cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);          //根据传递的参数值执行操作       如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false          boolean flag=cas.execute();          System.out.println(flag);          if(!flag){//执行成功了              String ename=cas.getString(2);              String job=cas.getString(3);              int sal=cas.getInt(4);              int deptno=cas.getInt(5);              System.out.println(ename);              System.out.println(job);              System.out.println(sal);              System.out.println(deptno);          }      }  实例二:  【  通过包声明一个存储过程  create or replace package emppackage is  type empcursor is ref cursor;  procedure selectEmps(emplist out empcursor);  end emppackage;  包体:  create or replace package body emppackage is  procedure selectEmps(emplist out empcursor) is  begin  open emplist for select * from emp;  end;  end emppackage;  】      public static void testProcedure() throws SQLException{          //创建CallableStatement  参数in  out  通过占位符传值          CallableStatement cas=conn.prepareCall("{call  emppackage.selectEmps(?)}");          //从1开始          int index = 1;          //为占位符赋值          cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.CURSOR);          //根据传递的参数值执行操作     返回false代表里面什么也没有,返回true代表返回的是ResultSet结果集          boolean flag=cas.execute();          System.out.println(flag);          //OracleCallableStatement强制造型为oracle中的存储过程的对象          //调用里边的getCursor方法 返回的是ResultSet结果集          ResultSet rs = ((OracleCallableStatement)cas).getCursor(1);          while(rs.next()){              System.out.println(rs.getInt(1));          }      }  
0 0
原创粉丝点击