在java語言中調用預存程序

來源:互聯網
上載者:User
首先一定要串連資料庫啊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));}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.