`
jsx112
  • 浏览: 315822 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JDBC调用存储过程

阅读更多

JDBC调用存储过程一般有3种:

  1.无返回值

  2.有一个返回值

  3.返回一个数据集,就是游标!

关键字:call 语法格式{call 存储过程名(参数列表)}

废话不说,见代码!

业务实例:

1.添加员工,如果指定部门不存在,则先添加部门信息,再添加员工(无返回值)

--创建存储过程如下

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();






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;





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();





3.需求同上, 并返回该部门的员工信息(工号和姓名)。(返回一个游标)

--创建存储过程如下

 --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中调用代码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();




 

分享到:
评论

相关推荐

    JDBC 调用存储过程方法

    本篇文章将深入探讨如何使用JDBC调用存储过程。 首先,存储过程是预编译的SQL代码集合,它们封装在数据库中,可以接收输入参数,处理数据,然后返回结果或输出参数。存储过程在提高性能、增强安全性和简化复杂操作...

    jdbc调用存储过程

    使用jdbc调用存储过程的代码示例 调用数据库连接池

    jdbc调用存储过程实现增删改查

    ### JDBC调用存储过程 1. **加载驱动**:使用`Class.forName()`方法加载Oracle的JDBC驱动,例如`oracle.jdbc.driver.OracleDriver`。 2. **建立连接**:通过`DriverManager.getConnection()`方法获取数据库连接。 3....

    jdbc调用存储过程,函数,游标

    本篇文章将详细讲解如何利用JDBC调用存储过程、函数以及处理游标。 首先,存储过程是数据库中预编译的一组SQL语句,它允许我们封装复杂的业务逻辑,提高执行效率,减少网络传输的数据量。在JDBC中调用存储过程通常...

    JDBC调用存储过程的小例子

    在这个“JDBC调用存储过程的小例子”中,我们将探讨如何使用JDBC来执行数据库中的存储过程,这是一个非常实用的功能,特别是在处理复杂的业务逻辑或批量数据操作时。 首先,我们需要了解什么是存储过程。存储过程是...

    31.jdbc调用存储过程?.avi

    jdbc调用存储过程?.avi

    JDBC调用存储过程.pdf

    ### JDBC调用存储过程知识点详解 #### 一、引言 在Java开发中,通过Java Database Connectivity (JDBC) 来访问数据库是非常常见的操作。其中,调用存储过程是实现复杂业务逻辑的一种重要方式。存储过程是预编译好...

    jdbc执行存储过程

    在给定的代码片段中,我们可以看到一个典型的使用JDBC调用存储过程的例子。下面,我们将分步骤解析这段代码: 1. **加载JDBC驱动**: ```java try{ Class.forName(...

    PLSQL jdbc调用存储过程(入门)

    PLSQL jdbc调用存储过程(入门)

    jdbc调用存储过程 函数例子

    本文将详细阐述如何通过JDBC在Java程序中调用存储过程和函数,并提供一个实际的例子。 ### 1. JDBC概述 JDBC是Java API,它提供了统一的接口来访问不同类型的数据库。通过JDBC,开发者可以进行数据库连接、执行SQL...

    Java面试题31.jdbc调用存储过程.mp4

    Java面试题31.jdbc调用存储过程.mp4

    JDBC调用MySQL5存储过程[文].pdf

    在软件开发中,JDBC...尽管JDBC调用存储过程相对简单,但设计和开发存储过程本身可能需要更深入的数据库知识和SQL编程技巧。在实际应用中,存储过程可以提高性能,封装复杂的业务逻辑,并提供数据库层面的安全性。

    android通过jdbc方式连接mysql,并执行存储过程

    android通过jdbc方式连接mysql,并执行存储过程。连接数据库部分最好新建一个线程来实现和主线程分开。编译之前确定添加了mysql-connector-java-5.0.8-bin库否则会出错

    jdbc针对存储过程通用的jdbc封装.zip

    JDBC调用存储过程的基本步骤如下: 1. 加载数据库驱动并建立连接:使用`Class.forName()`加载驱动,然后通过`DriverManager.getConnection()`建立与数据库的连接。 2. 创建CallableStatement对象:与...

    hibernate框架调用存储过程

    本篇文章将深入探讨如何在Hibernate框架中调用存储过程,并与JDBC调用存储过程的方式进行比较。 首先,我们要了解存储过程是什么。存储过程是预编译的SQL语句集合,存储在数据库服务器中,可被多次调用,减少了网络...

    JDBC存储过程的调用

    JDBC存储过程的调用

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程,并将结果集处理到 `List` 集合中。 对于 `P_EMP_ADD` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程...

Global site tag (gtag.js) - Google Analytics