一、简介

  与调用mysql存储过程类型过程都是如下

  1、创建连接 Connection conn = DriverManager.getConnection(url, user, password);

  2、创建CallableStatement CallableStatement statement = conn.prepareCall(sql);

  3、设置参数

    statement.setInt(1, id);
    statement.registerOutParameter(2, Types.VARCHAR);
    statement.registerOutParameter(3, Types.INTEGER);
    statement.registerOutParameter(4, Types.VARCHAR);

  4、执行

    statement.execute(); 或 statement.executeUpdate();

  5、获取返回

    int age = statement.getInt(3);

  只是oracle存储过程有的结果集是以游标的方式返回,此时我们需要调用ResultSet rs = (ResultSet) statement.getObject(1);方法回去结果集

二、代码

  以下存储过程表结构如下:

DROP TABLE person ;
CREATE TABLE person (
id NUMBER(11) NOT NULL ,
username VARCHAR2(255 ) NULL ,
age NUMBER(11) NULL ,
password VARCHAR2(255) NULL ,
PRIMARY KEY (id)
)

  1、查询所有记录

  存储过程代码如下:

create or replace procedure pro_person_findall(p_cursor out pkg_const.r_cursor
)
is
beginopen p_cursor forselect *  from person;exceptionwhen others thenDBMS_OUTPUT.PUT_LINE('获取信息发生错误');
end pro_person_findall;

  调用代码如下

public static void findAll() {String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx";String user = "wuxx";String password = "wuxx";try {Class.forName(driver);Connection conn = DriverManager.getConnection(url, user, password);String sql = "{call pro_person_findall2(?)}";CallableStatement statement = conn.prepareCall(sql);statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);statement.execute();ResultSet rs = (ResultSet) statement.getObject(1);ResultSetMetaData rmd = rs.getMetaData();System.out.print(rmd.getColumnName(1) + "    ");System.out.print(rmd.getColumnName(2) + "    ");System.out.print(rmd.getColumnName(3) + "    ");System.out.print(rmd.getColumnName(4) + "\n");while (rs.next()) {System.out.print(rs.getInt("id") + "    ");System.out.print(rs.getString("username") + "    ");System.out.print(rs.getInt("age") + "    ");System.out.print(rs.getString("password") + " \n");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}

  2、查询一条记录

  存储过程如下

CREATE OR REPLACE PROCEDURE PRO_PERSON_FINDBYID(v_id IN NUMBER,v_username    OUT    VARCHAR2,v_age    OUT    NUMBER,v_password OUT    VARCHAR2,p_count out number
)
AS
BEGINSELECT username, age, password INTO v_username, v_age, v_password  from person where id = v_id;p_count := 1; exceptionwhen others thenp_count := 0;
END;

  调用代码如下:

public static void find(Integer id) {String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx";String user = "wuxx";String password = "wuxx";try {Class.forName(driver);Connection conn = DriverManager.getConnection(url, user, password);String sql = "{call PRO_PERSON_FINDBYID(?,?,?,?,?)}";CallableStatement statement = conn.prepareCall(sql);BigDecimal rid = new BigDecimal(id);statement.setInt(1, id);statement.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);statement.registerOutParameter(3, oracle.jdbc.OracleTypes.NUMBER);; //
            statement.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR);statement.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER);statement.execute();int flag = statement.getInt(5);if (flag != 0)System.out.println(statement.getString(2) + "  "+ statement.getInt(3) + "  " + statement.getString(4));elseSystem.out.println("data not found!");} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}

  3、增加记录

  存储过程代码如下:

create or replace procedure pro_person_insert(p_id number,p_username varchar2,p_age number,p_password varchar2,p_count out number
)
is
begininsert into person (id, username, age, password) values(p_id, p_username, p_age, p_password);p_count := SQL%ROWCOUNT;  -- SQL%ROWCOUNT为 隐士游标的属性commit;exceptionwhen others thenp_count := 0;
end pro_person_insert;

  调用代码如下:

public static void add(Integer id, String username, int age,String u_password) {String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx";String user = "wuxx";String password = "wuxx";try {Class.forName(driver);Connection conn = DriverManager.getConnection(url, user, password);String sql = "{call pro_person_insert(?,?,?,?,?)}";CallableStatement statement = conn.prepareCall(sql);statement.setInt(1, id);statement.setString(2, username);statement.setInt(3, id);statement.setString(4, u_password);statement.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER);// 增加记录是否成功的标记,1 成功,0失败
            statement.execute();System.out.println(statement.getInt(5));} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}

  4、更新记录

  存储过程代码如下:

create or replace procedure pro_person_update(p_id number,p_age number,p_password varchar2,p_count out number
)
is
beginupdate person set age = p_age, password = p_password where id = p_id;p_count := SQL%ROWCOUNT;commit;exceptionwhen no_data_found thenp_count := 0;when others thenp_count := -1;
end pro_person_update;

  调用代码如下:

public static void update(Integer id, int age, String u_password) {String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx";String user = "wuxx";String password = "wuxx";try {Class.forName(driver);Connection conn = DriverManager.getConnection(url, user, password);String sql = "{call pro_person_update(?,?,?,?)}";CallableStatement statement = conn.prepareCall(sql);statement.setInt(1, id);statement.setInt(2, age);statement.setString(3, u_password);statement.registerOutParameter(4, oracle.jdbc.OracleTypes.NUMBER);// 增加记录是否成功的标记
            statement.execute();System.out.println(statement.getInt(4));} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}

  5、删除记录

  存储过程代码如下:

create or replace procedure pro_person_delete(p_id number,p_count out number
)
is
begindelete from person where id = p_id;p_count := SQL%ROWCOUNT;commit;exceptionwhen no_data_found thenp_count := 0;when others thenp_count := -1;
end pro_person_delete;

  调用代码如下:

public static void delete(Integer id) {String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx";String user = "wuxx";String password = "wuxx";try {Class.forName(driver);Connection conn = DriverManager.getConnection(url, user, password);String sql = "{call pro_person_delete(?,?)}";CallableStatement statement = conn.prepareCall(sql);statement.setInt(1, id);statement.registerOutParameter(2, oracle.jdbc.OracleTypes.NUMBER);// 增加记录是否成功的标记
            statement.execute();System.out.println(statement.getInt(2));} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}

存储过程之八-java代码调用oracle存储过程相关推荐

  1. php oracle 存储过程 返回值,PHP 调用 Oracle 存储过程 之 查询

    在网上找了很久都没找到结果,今天看帮助,结合JAVA程序中的一个实例,写出了这个PHP调用Oracle存储过程的例子,也许有人会说PHP调用存储过程是很简单的,但在这里我还是想把这点小成就拿来共享一下 ...

  2. cmd 调用oracle存储过程,asp.net中调用oracle存储过程的方法

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果 ...

  3. java 调用 oracle存储过程_java代码调用oracle存储过程

    一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...

  4. Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)

     一:无返回值的存储过程调用 存储过程: CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN ...

  5. java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)

    oracle中procedure是不能有返回值的,要想返回值,就得有输出参数,同样要想返回记录集,可以把游标类型作为输出参数. 下面是详细情况说明: 一:无返回值的存储过程调用 存储过程: creat ...

  6. oracle存储过程的创建与调用,Oracle 存储过程创建及调用

    java基础小知识 1.1常量: 基本数据类型常量 字符常量 整数常量的表现形式:一进制的形式来表示(二进制,八进制,十进制,十六进制) 生活中:十进制(0-9)  ,星期(七进制(0-6)) ,时间 ...

  7. java调用oracle存储过程_java调用oracle存储过程详解

    之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧. 首先来看一下项目结构: 在数据库创建存储过程的脚本,假如,使用的是本地的oracl ...

  8. oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...

    java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...

  9. java调用存储过程 oracle_java调用oracle存储过程

    java调用oracle存储过程 java代码 Map param = new HashMap(); param.put("in_str", "1,2,3,4" ...

最新文章

  1. 在Ubuntu上安装Odoo 11(企业版)
  2. 吃透这套架构演化图_从零搭建Web网站也不难!
  3. 安装oracle 11gR2单实例+ASM
  4. shell和linux的认识
  5. 配置Exchange Server 2010数据库高可用性组(DAG)
  6. Linux下C++的多线程编程---(转载)
  7. MySQL/sqlserver查询in操作 查询结果按in集合顺序显示
  8. AcWing 1055. 股票买卖 II
  9. 计算机辅助建筑制图规范,房屋建筑制图统一标准 [附条文说明] GB/T50001-2017
  10. android方法是对象吗,为什么android中对象不初始化也能调用方法?
  11. 思科路由器如何导出配置文件_如何备份cisco路由器配置文件
  12. mac word 复制自动产生书签
  13. ubuntu 18.04设置静态ip(固定IP地址)
  14. 毕业旅行 | 伦敦5日游行程推荐
  15. 开通了个人微信公众号:slbGTD,准备把GTD相关的内容写成一本书
  16. 安装SSL证书的网站被谷歌提升排名权重
  17. 直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)
  18. 2022-D^3CTF-Web-Writeup
  19. QT窗口:透明与半透明、不规则异形窗口、控件透明与半透明、不规则异形按钮
  20. 区分浏览器,判断浏览器版本

热门文章

  1. jquery字符串相等判断
  2. LOL中那些不可错过的精彩对局!!!
  3. 20210323第一家量产国产化蓝牙AOA高精度定位基站生态合能培训会上海站现场直播下午内容视频录像回放-深圳核芯物联原厂工程师罗良技术分享
  4. ArcGIS平滑处理
  5. 74hc165三片级联
  6. 【通信原理】学习笔记----理解信道
  7. 拉易网10分钟制作图文并茂邮件的高级技巧
  8. 适老化专栏(二)| 互联网世界中的老年人
  9. Leetcode 971 C++代码
  10. Linux学习(Kali为蓝本)