91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java 中怎么利用JDBC調用Oracle存儲過程

發布時間:2021-07-02 14:33:13 來源:億速云 閱讀:244 作者:Leah 欄目:編程語言

Java 中怎么利用JDBC調用Oracle存儲過程,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Java JDBC調用Oracle存儲過程一般有3種:

1.無返回值

2.有一個返回值

3.返回一個數據集,就是游標!

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

廢話不說,見代碼!

Java JDBC調用Oracle存儲過程業務實例:

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

--創建存儲過程如下  

CREATE OR REPLACE PROCEDURE sp_add_emp1(          v_empno emp.empno%TYPE,          v_ename emp.ename%TYPE,          v_deptno dept.deptno%TYPE,          v_dname dept.dname%TYPE      )AS         num1 NUMBER;          num2 NUMBER;      BEGIN        SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;      IF(num1=0) THEN        INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);      END IF;         SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;      IF(num2=0)THEN        INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);      ELSE         raise_application_error(-202021,'員工id 重復!!!');      END IF;         commit;           END;      CREATE OR REPLACE PROCEDURE sp_add_emp1(     v_empno emp.empno%TYPE,     v_ename emp.ename%TYPE,     v_deptno dept.deptno%TYPE,     v_dname dept.dname%TYPE  )AS    num1 NUMBER;     num2 NUMBER;  BEGIN    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;  IF(num1=0) THEN    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);  END IF;     SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;  IF(num2=0)THEN    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);  ELSE    raise_application_error(-202021,'員工id 重復!!!');  END IF;     commit;   END;

Java中調用代碼1:

Class.forName("oracle.jdbc.driver.OracleDriver");      conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");      conn.setAutoCommit(false);           conn=DBConnection.getDBConnection().getConnection();      String spName="{call sp_add_emp1(?,?,?,?)}";      CallableStatement cstmt=conn.prepareCall(spName);      cstmt.setInt(1, 2);      cstmt.setString(2, "wwww");      cstmt.setInt(3, 1);      cstmt.setString(4, "qwqwq");      cstmt.executeUpdate();           conn.close();        Class.forName("oracle.jdbc.driver.OracleDriver");    conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");    conn.setAutoCommit(false);     conn=DBConnection.getDBConnection().getConnection();    String spName="{call sp_add_emp1(?,?,?,?)}";    CallableStatement cstmt=conn.prepareCall(spName);    cstmt.setInt(1, 2);    cstmt.setString(2, "wwww");    cstmt.setInt(3, 1);    cstmt.setString(4, "qwqwq");    cstmt.executeUpdate();     conn.close();

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

--創建存儲過程如下  

CREATE OR REPLACE PROCEDURE sp_add_emp2(          v_empno emp.empno%TYPE,          v_ename emp.ename%TYPE,          v_deptno dept.deptno%TYPE,          v_dname dept.dname%TYPE,               num out number      )AS         num1 NUMBER;          num2 NUMBER;      BEGIN        SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;      IF(num1=0) THEN        INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);      END IF;         SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;      IF(num2=0)THEN        INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);      ELSE         raise_application_error(-202021,'員工id 重復!!!');      END IF;               num:=num1;         commit;           END;      CREATE OR REPLACE PROCEDURE sp_add_emp2(     v_empno emp.empno%TYPE,     v_ename emp.ename%TYPE,     v_deptno dept.deptno%TYPE,     v_dname dept.dname%TYPE,      num out number  )AS    num1 NUMBER;     num2 NUMBER;  BEGIN    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;  IF(num1=0) THEN    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);  END IF;     SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;  IF(num2=0)THEN    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);  ELSE    raise_application_error(-202021,'員工id 重復!!!');  END IF;      num:=num1;     commit;   END;

Java中調用代碼2:

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

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

--創建存儲過程如下

Sql代碼

--1.建包   

CREATE OR REPLACE PACKAGE my_pak AS        TYPE my_cus IS REF CURSOR   ;      END my_pak;

--2.寫存儲返回過程    

CREATE OR REPLACE PROCEDURE sp_add_emp3(          v_empno emp.empno%TYPE,          v_ename emp.ename%TYPE,          v_deptno dept.deptno%TYPE,          v_dname dept.dname%TYPE,               p_cus OUT my_pak.my_cus      )AS         num1 NUMBER;          num2 NUMBER;      BEGIN          OPEN p_cus FOR select empno,ename into v_empno,v_ename  from emp where deptno =v_deptno         SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;      IF(num1=0) THEN        INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);      END IF;         SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;      IF(num2=0)THEN        INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);      ELSE         raise_application_error(-202021,'員工id 重復!!!');      END IF;         commit;           END;

--1.建包

CREATE OR REPLACE PACKAGE my_pak AS  TYPE my_cus IS REF CURSOR  ;  END my_pak;

--2.寫存儲返回過程

CREATE OR REPLACE PROCEDURE sp_add_emp3(     v_empno emp.empno%TYPE,     v_ename emp.ename%TYPE,     v_deptno dept.deptno%TYPE,     v_dname dept.dname%TYPE,      p_cus OUT my_pak.my_cus  )AS    num1 NUMBER;     num2 NUMBER;  BEGIN  OPEN p_cus FOR select empno,ename into v_empno,v_ename  from emp where deptno =v_deptno      SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;  IF(num1=0) THEN    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);  END IF;     SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;  IF(num2=0)THEN    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);  ELSE    raise_application_error(-202021,'員工id 重復!!!');  END IF;     commit;   END;

Java JDBC調用Oracle,Java中調用代碼3: 

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

關于Java 中怎么利用JDBC調用Oracle存儲過程問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沿河| 平邑县| 独山县| 肃宁县| 荆州市| 屏南县| 西华县| 桦甸市| 柏乡县| 锦屏县| 通州市| 新平| 肥城市| 塔河县| 水城县| 桐城市| 格尔木市| 南安市| 万源市| 顺平县| 将乐县| 沅江市| 鄯善县| 视频| 丰台区| 天长市| 桦川县| 东港市| 涿鹿县| 思南县| 德庆县| 平阳县| 海淀区| 阿克陶县| 筠连县| 龙海市| 张家口市| 金塔县| 崇明县| 大邑县| 嘉定区|