首先一定要连接数据库啊 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)); } }