存储过程之八-java代码调用oracle存储过程
一、简介
与调用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存储过程相关推荐
- php oracle 存储过程 返回值,PHP 调用 Oracle 存储过程 之 查询
在网上找了很久都没找到结果,今天看帮助,结合JAVA程序中的一个实例,写出了这个PHP调用Oracle存储过程的例子,也许有人会说PHP调用存储过程是很简单的,但在这里我还是想把这点小成就拿来共享一下 ...
- cmd 调用oracle存储过程,asp.net中调用oracle存储过程的方法
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果 ...
- java 调用 oracle存储过程_java代码调用oracle存储过程
一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...
- Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)
一:无返回值的存储过程调用 存储过程: CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN ...
- java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)
oracle中procedure是不能有返回值的,要想返回值,就得有输出参数,同样要想返回记录集,可以把游标类型作为输出参数. 下面是详细情况说明: 一:无返回值的存储过程调用 存储过程: creat ...
- oracle存储过程的创建与调用,Oracle 存储过程创建及调用
java基础小知识 1.1常量: 基本数据类型常量 字符常量 整数常量的表现形式:一进制的形式来表示(二进制,八进制,十进制,十六进制) 生活中:十进制(0-9) ,星期(七进制(0-6)) ,时间 ...
- java调用oracle存储过程_java调用oracle存储过程详解
之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧. 首先来看一下项目结构: 在数据库创建存储过程的脚本,假如,使用的是本地的oracl ...
- oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...
java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...
- java调用存储过程 oracle_java调用oracle存储过程
java调用oracle存储过程 java代码 Map param = new HashMap(); param.put("in_str", "1,2,3,4" ...
最新文章
- 在Ubuntu上安装Odoo 11(企业版)
- 吃透这套架构演化图_从零搭建Web网站也不难!
- 安装oracle 11gR2单实例+ASM
- shell和linux的认识
- 配置Exchange Server 2010数据库高可用性组(DAG)
- Linux下C++的多线程编程---(转载)
- MySQL/sqlserver查询in操作 查询结果按in集合顺序显示
- AcWing 1055. 股票买卖 II
- 计算机辅助建筑制图规范,房屋建筑制图统一标准 [附条文说明] GB/T50001-2017
- android方法是对象吗,为什么android中对象不初始化也能调用方法?
- 思科路由器如何导出配置文件_如何备份cisco路由器配置文件
- mac word 复制自动产生书签
- ubuntu 18.04设置静态ip(固定IP地址)
- 毕业旅行 | 伦敦5日游行程推荐
- 开通了个人微信公众号:slbGTD,准备把GTD相关的内容写成一本书
- 安装SSL证书的网站被谷歌提升排名权重
- 直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)
- 2022-D^3CTF-Web-Writeup
- QT窗口:透明与半透明、不规则异形窗口、控件透明与半透明、不规则异形按钮
- 区分浏览器,判断浏览器版本