程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> JAVA連接Oracle中使用存儲過程

JAVA連接Oracle中使用存儲過程

編輯:Oracle數據庫基礎

JAVA中連接數據庫叫JDBC(Java DataBase Connection).

那麼Java對不同的數據庫進行連接的方式都是一樣的。這是因為SUN公司定義了對數據庫操作的接口,而由各大數據庫廠商來實現。而這個實現就是我們在連接各種數據庫時拷入的JAR包。

這裡只是介紹 JDBC中是怎麼調用存儲過程

這是一個簡單的存儲過程

CREATE OR REPLACE PROCEDURE sp_test
(v_out OUT NUMBER)
AS
BEGIN
   v_out:=10;
END;

Java中的程序

 Class.forName("oracle.jdbc.driver.OracleDriver");
  Connection con=DriverManager.getConnection("jdbc:Oracle:thin:@localhost:1521:ORCL", "scott", "tiger");
  int num=0;
  String sql="{call sp_test(?)}";
  CallableStatement cs=con.prepareCall(sql);
  cs.setObject(1, num);
  cs.registerOutParameter(1,Java.sql.Types.INTEGER);
  cs.executeUpdate();

  num=cs.getInt(1);

這時num的值就為10,這個是存儲過程sp_test返回的。

上面只是返回一個值,如果返回游標怎麼辦啦?

CREATE OR REPLACE PROCEDURE sp_test
(v_cur_list OUT  sys_refcursor)   // 這裡sys_refcursor 是系統定義游標,可以直接用,不再去新建
AS                                 //游標,放到包中 在引用了。
BEGIN
    OPEN v_cur_list FOR SELECT * FROM dept;
END;

Java中的代碼

 Class.forName("oracle.jdbc.driver.OracleDriver");
  Connection con=DriverManager.getConnection("jdbc:Oracle:thin:@localhost:1521:ORCL", "scott", "tiger");
  int num=0;
  String sql="{call sp_test(?)}";
  CallableStatement cs=con.prepareCall(sql);
  cs.setObject(1, num);
  cs.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
  cs.execute();
  ResultSet rs=(ResultSet)cs.getObject(1);
  while (rs.next()){
   System.out.println(rs.getObject(1).toString()+rs.getObject(2).toString());
  }

大家一定注意到了,這個兩端Java程序在執行的時候分別是cs.execute()和cs.executeUpdate();

這裡還可以改為cs.executeQuery(),雖然這個三個返回的數據類型都不一樣,但在調用存儲過程的時候這三個是通用的,是不是很神奇啊!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved