Maison >Java >javaDidacticiel >Comment Java utilise JDBC pour appeler le stockage Oracle

Comment Java utilise JDBC pour appeler le stockage Oracle

王林
王林avant
2023-05-12 21:52:04694parcourir

Il existe généralement trois types d'appels Java JDBC aux procédures stockées Oracle :

1 Aucune valeur de retour

2.

3. Renvoie un ensemble de données, qui est le curseur !

Mot clé : format de syntaxe d'appel {nom de la procédure stockée d'appel (liste des paramètres)}

Pas de bêtises, voyez le code !

Java JDBC appelle l'instance métier de procédure stockée Oracle :

1. Ajoutez des employés si le service spécifié n'existe pas, ajoutez d'abord les informations du service, puis ajoutez les employés (aucun retour. value)

--Créez la procédure stockée comme suit


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;
Appel du code 1 en Java :

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. sont les mêmes que ci-dessus, renvoyez simplement le nombre total d'employés du département. (Il y a une valeur de retour)

--Créez la procédure stockée comme suit


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;
Appel du code 2 en Java :

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. Les exigences sont les mêmes que ci-dessus et les informations sur l'employé (numéro de poste et nom) du département sont renvoyées. (Renvoyer un curseur)

--Créez la procédure stockée comme suit

Sql code

--1. #🎜 🎜#--2. Écrivez la procédure de retour stockée ​

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

--1 Construisez le package

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;

--2. . Écrivez la procédure de retour stockée
CREATE OR REPLACE PACKAGE my_pak AS  TYPE my_cus IS REF CURSOR  ;  END my_pak;

Java JDBC appelle Oracle, appelant le code 3 en Java :

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;
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer