日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺析Java JDBC調(diào)用Oracle存儲過程

Java JDBC調(diào)用Oracle存儲過程一般有3種:

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、清江浦網(wǎng)絡(luò)推廣、成都小程序開發(fā)、清江浦網(wǎng)絡(luò)營銷、清江浦企業(yè)策劃、清江浦品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供清江浦建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

1.無返回值

2.有一個返回值

3.返回一個數(shù)據(jù)集,就是游標!

關(guān)鍵字:call 語法格式{call 存儲過程名(參數(shù)列表)}

廢話不說,見代碼!

Java JDBC調(diào)用Oracle存儲過程業(yè)務(wù)實例:

1.添加員工,如果指定部門不存在,則先添加部門信息,再添加員工(無返回值)

--創(chuàng)建存儲過程如下

 
 
 
  1. CREATE OR REPLACE PROCEDURE sp_add_emp1(      
  2.     v_empno emp.empno%TYPE,      
  3.     v_ename emp.ename%TYPE,      
  4.     v_deptno dept.deptno%TYPE,      
  5.     v_dname dept.dname%TYPE      
  6. )AS     
  7.     num1 NUMBER;      
  8.     num2 NUMBER;      
  9. BEGIN     
  10.    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;      
  11. IF(num1=0) THEN     
  12.    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);      
  13. END IF;      
  14.    SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;      
  15. IF(num2=0)THEN     
  16.    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);      
  17. ELSE     
  18.     raise_application_error(-202021,'員工id 重復(fù)?。?!');      
  19. END IF;      
  20.    commit;      
  21.      
  22. END;     
  23.  
  24. CREATE OR REPLACE PROCEDURE sp_add_emp1(  
  25.    v_empno emp.empno%TYPE,  
  26.    v_ename emp.ename%TYPE,  
  27.    v_deptno dept.deptno%TYPE,  
  28.    v_dname dept.dname%TYPE  
  29. )AS 
  30.    num1 NUMBER;  
  31.    num2 NUMBER;  
  32. BEGIN 
  33.    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;  
  34. IF(num1=0) THEN 
  35.    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);  
  36. END IF;  
  37.    SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;  
  38. IF(num2=0)THEN 
  39.    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);  
  40. ELSE 
  41.    raise_application_error(-202021,'員工id 重復(fù)!??!');  
  42. END IF;  
  43.    commit;  
  44.  
  45. END; 

Java中調(diào)用代碼1:

 
 
 
  1. Class.forName("oracle.jdbc.driver.OracleDriver");      
  2. conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");      
  3. conn.setAutoCommit(false);      
  4.      
  5. conn=DBConnection.getDBConnection().getConnection();      
  6. String spName="{call sp_add_emp1(?,?,?,?)}";      
  7. CallableStatement cstmt=conn.prepareCall(spName);      
  8. cstmt.setInt(1, 2);      
  9. cstmt.setString(2, "wwww");      
  10. cstmt.setInt(3, 1);      
  11. cstmt.setString(4, "qwqwq");      
  12. cstmt.executeUpdate();      
  13.      
  14. conn.close();     
  15.  
  16.   Class.forName("oracle.jdbc.driver.OracleDriver");  
  17.   conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");  
  18.   conn.setAutoCommit(false);  
  19.  
  20.   conn=DBConnection.getDBConnection().getConnection();  
  21.   String spName="{call sp_add_emp1(?,?,?,?)}";  
  22.   CallableStatement cstmt=conn.prepareCall(spName);  
  23.   cstmt.setInt(1, 2);  
  24.   cstmt.setString(2, "wwww");  
  25.   cstmt.setInt(3, 1);  
  26.   cstmt.setString(4, "qwqwq");  
  27.   cstmt.executeUpdate();  
  28.  
  29.   conn.close(); 

2.需求同上, 只是返回該部門的員工總數(shù)。(有一個返回值)

--創(chuàng)建存儲過程如下

 
 
 
  1. CREATE OR REPLACE PROCEDURE sp_add_emp2(      
  2.     v_empno emp.empno%TYPE,      
  3.     v_ename emp.ename%TYPE,      
  4.     v_deptno dept.deptno%TYPE,      
  5.     v_dname dept.dname%TYPE,      
  6.      
  7.     num out number      
  8. )AS     
  9.     num1 NUMBER;      
  10.     num2 NUMBER;      
  11. BEGIN     
  12.    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;      
  13. IF(num1=0) THEN     
  14.    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);      
  15. END IF;      
  16.    SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;      
  17. IF(num2=0)THEN     
  18.    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);      
  19. ELSE     
  20.     raise_application_error(-202021,'員工id 重復(fù)?。?!');      
  21. END IF;      
  22.      
  23.     num:=num1;      
  24.    commit;      
  25.      
  26. END;     
  27.  
  28. CREATE OR REPLACE PROCEDURE sp_add_emp2(  
  29.    v_empno emp.empno%TYPE,  
  30.    v_ename emp.ename%TYPE,  
  31.    v_deptno dept.deptno%TYPE,  
  32.    v_dname dept.dname%TYPE,  
  33.  
  34.    num out number  
  35. )AS 
  36.    num1 NUMBER;  
  37.    num2 NUMBER;  
  38. BEGIN 
  39.    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;  
  40. IF(num1=0) THEN 
  41.    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);  
  42. END IF;  
  43.    SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;  
  44. IF(num2=0)THEN 
  45.    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);  
  46. ELSE 
  47.    raise_application_error(-202021,'員工id 重復(fù)?。?!');  
  48. END IF;  
  49.  
  50.    num:=num1;  
  51.    commit;  
  52.  
  53. END

Java中調(diào)用代碼2:

 
 
 
  1. Class.forName("oracle.jdbc.driver.OracleDriver");      
  2. conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");      
  3. conn.setAutoCommit(false);      
  4.      
  5. conn=DBConnection.getDBConnection().getConnection();      
  6.      
  7. String spName="{call sp_add_emp2(?,?,?,?,?)}";      
  8. CallableStatement cstmt=conn.prepareCall(spName);      
  9. cstmt.setInt(1,1111);      
  10. cstmt.setString(2, "qqqq");      
  11. cstmt.setInt(3, 50);      
  12. cstmt.setString(4, "pppp");      
  13. cstmt.registerOutParameter(5, java.sql.Types.INTEGER);      
  14. cstmt.executeUpdate();      
  15. int i = cstmt.getInt(5);      
  16. System.out.println(i);      
  17. cstmt.close();      
  18. conn.close();     
  19.  
  20.      Class.forName("oracle.jdbc.driver.OracleDriver");  
  21.      conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");  
  22.      conn.setAutoCommit(false);  
  23.  
  24.      conn=DBConnection.getDBConnection().getConnection();  
  25.  
  26.      String spName="{call sp_add_emp2(?,?,?,?,?)}";  
  27.      CallableStatement cstmt=conn.prepareCall(spName);  
  28.      cstmt.setInt(1,1111);  
  29.      cstmt.setString(2, "qqqq");  
  30.      cstmt.setInt(3, 50);  
  31.      cstmt.setString(4, "pppp");  
  32.      cstmt.registerOutParameter(5, java.sql.Types.INTEGER);  
  33.      cstmt.executeUpdate();  
  34.      int i = cstmt.getInt(5);  
  35.      System.out.println(i);  
  36.      cstmt.close();  
  37.      conn.close(); 

3.需求同上, 并返回該部門的員工信息(工號和姓名)。(返回一個游標)

--創(chuàng)建存儲過程如下

Sql代碼

--1.建包 

 
 
 
  1. CREATE OR REPLACE PACKAGE my_pak AS     
  2.    TYPE my_cus IS REF CURSOR   ;      
  3. END my_pak;     

--2.寫存儲返回過程    

 
 
 
  1. CREATE OR REPLACE PROCEDURE sp_add_emp3(      
  2.     v_empno emp.empno%TYPE,      
  3.     v_ename emp.ename%TYPE,      
  4.     v_deptno dept.deptno%TYPE,      
  5.     v_dname dept.dname%TYPE,      
  6.      
  7.     p_cus OUT my_pak.my_cus      
  8. )AS     
  9.     num1 NUMBER;      
  10.     num2 NUMBER;      
  11. BEGIN     
  12.      
  13. OPEN p_cus FOR select empno,ename into v_empno,v_ename  from emp where deptno =v_deptno      
  14.    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;      
  15. IF(num1=0) THEN     
  16.    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);      
  17. END IF;      
  18.    SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;      
  19. IF(num2=0)THEN     
  20.    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);      
  21. ELSE     
  22.     raise_application_error(-202021,'員工id 重復(fù)?。。?);      
  23. END IF;      
  24.    commit;      
  25.      
  26. END;    

 --1.建包

 
 
 
  1. CREATE OR REPLACE PACKAGE my_pak AS 
  2.  TYPE my_cus IS REF CURSOR  ;  
  3. END my_pak; 

 --2.寫存儲返回過程

 
 
 
  1. CREATE OR REPLACE PROCEDURE sp_add_emp3(  
  2.    v_empno emp.empno%TYPE,  
  3.    v_ename emp.ename%TYPE,  
  4.    v_deptno dept.deptno%TYPE,  
  5.    v_dname dept.dname%TYPE,  
  6.  
  7.    p_cus OUT my_pak.my_cus  
  8. )AS 
  9.    num1 NUMBER;  
  10.    num2 NUMBER;  
  11. BEGIN 
  12.  
  13. OPEN p_cus FOR select empno,ename into v_empno,v_ename  from emp where deptno =v_deptno   
  14.    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;  
  15. IF(num1=0) THEN 
  16.    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);  
  17. END IF;  
  18.    SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;  
  19. IF(num2=0)THEN 
  20.    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);  
  21. ELSE 
  22.    raise_application_error(-202021,'員工id 重復(fù)?。。?);  
  23. END IF;  
  24.    commit;  
  25.  
  26. END

Java JDBC調(diào)用Oracle,Java中調(diào)用代碼3:

 
 
 
  1. Class.forName("oracle.jdbc.driver.OracleDriver");      
  2. conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");      
  3. conn.setAutoCommit(false);      
  4.      
  5. conn=DBConnection.getDBConnection().getConnection();      
  6.      
  7. String spName="{call sp_add_emp2(?,?,?,?,?)}";      
  8. CallableStatement cstmt=conn.prepareCall(spName);      
  9. cstmt.setInt(1,1111);      
  10. cstmt.setString(2, "qqqq");      
  11. cstmt.setInt(3, 50);      
  12. cstmt.setString(4, "pppp");      
  13. cstmt.registerOutParameter(5, java.sql.Types.ORACLETYPE);      
  14. cstmt.executeUpdate();      
  15. int i = cstmt.getInt(5);      
  16. System.out.println(i);      
  17. cstmt.close();      
  18. conn.close();    

【編輯推薦】

  1. 在Weblogic中實現(xiàn)JDBC的功能
  2. 詳解JDBC與Hibernate區(qū)別
  3. JDBC連接MySQL數(shù)據(jù)庫關(guān)鍵四步
  4. 五步精通SQL Server 2000 JDBC驅(qū)動安裝與測試
  5. 詳解JDBC驅(qū)動的四種類型
  6. JDBC存儲過程在Oracle中的獲取結(jié)果集

新聞標題:淺析Java JDBC調(diào)用Oracle存儲過程
標題URL:http://www.dlmjj.cn/article/cdicphh.html