首先一定要串連資料庫啊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 blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}執行個體一:【create or replace procedure selectEmp(emp_no in number,ename out varchar2,job out varchar2,sal out number,deptno out number) isbeginselect 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;如果第一個結果是更新計數或者沒有結果,則返回 falseboolean 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 istype empcursor is ref cursor;procedure selectEmps(emplist out empcursor);end emppackage;包體:create or replace package body emppackage isprocedure selectEmps(emplist out empcursor) isbeginopen 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));}}