一、简介

  与调用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
begin
open p_cursor for
select * from person;
exception
when others then
DBMS_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
BEGIN
SELECT username, age, password INTO v_username, v_age, v_password from person where id = v_id;
p_count := 1;
exception
when others then
p_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));
else
System.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
begin
insert into person (id, username, age, password) values(p_id, p_username, p_age, p_password);
p_count := SQL%ROWCOUNT; -- SQL%ROWCOUNT为 隐士游标的属性
commit;
exception
when others then
p_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
begin
update person set age = p_age, password = p_password where id = p_id;
p_count := SQL%ROWCOUNT;
commit;
exception
when no_data_found then
p_count := 0;
when others then
p_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
begin
delete from person where id = p_id;
p_count := SQL%ROWCOUNT;
commit;
exception
when no_data_found then
p_count := 0;
when others then
p_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. Java代码调用Oracle的存储过程,存储函数和包

    Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名  月薪 职位 create or ...

  2. java代码调用数据库存储过程

    由于前边有写java代码调用数据库,感觉应该把java调用存储过程也写一下,所以笔者补充该篇! package testSpring; import java.sql.CallableStatemen ...

  3. java基础---->java调用oracle存储过程(转)

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

  4. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

  5. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  6. java基础---->java调用oracle存储过程

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

  7. 用java 调用oracle存储过程总结

    SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例 https://www.jianshu.com/p/0ae6d9d66d61 用java调用oracle存储过程总结 //1.ca ...

  8. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  9. java 实现往oracle存储过程中传递array数组类型的参数

    注:本文来源于 <  java 实现往oracle存储过程中传递array数组类型的参数  >最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码 ...

随机推荐

  1. Web性能

    使用Web性能测试可以很容易地创建一组可重复的测试,从而帮助我们分析web应用程序的性能,找到性能瓶颈. Web性能测试可以验证一个Web应用程序的行为是否正确.它们会向目标Web应用程序发布一组有序 ...

  2. struts2基础——最简单的一个例子

    学习版本:struts-2.3.15.3 一.导入jar包,可以参考 官方项目 blank. 二.添加配置文件:web.xml struts.xml web.xml: <filter> & ...

  3. Array 数组常用方法

    (1)基本的数组方法 1.join() Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生成的字符串.可以自己指定分隔的符号,如果不指定,默认使用逗号 var arr ...

  4. ok6410 android driver(5)

    Test the android driver by JNI (Java Native Interface), In the third article, we know how to compile ...

  5. 【原创】记一次Sql2008R2的数据库订阅发布遇到的问题!

    1.首先新建一个空的数据库 CreditTest,里面没有任何表结构,视图,数据等. 2.在已连接的服务器的下方找到“复制”选项,然后兴建发布: ...(新建发布成功) ...(新建订阅成功) 3.问 ...

  6. Azure开发者任务之二:Cloud Service项目添加到ASP.Net Web中

    假设我们正在把现有的Web应用程序或ASP.Net MVC Web应用程序迁移到云中.在这种情况下,我们需要把云服务添加到现有的Web应用程序或ASP.Net MVC Web应用程序中. 我们有一个W ...

  7. C#基础--之数据类型

    C#基础--之数据类型 摘自:http://www.cnblogs.com/tonney/archive/2011/03/18/1987577.html 在第一章我们了解了C#的输入.输出语句后,我这 ...

  8. ToDoList:一款非常优秀的任务管理软件 —— 工具类

    ToDoList是一款非常优秀的任务管理软件,用户可以方便地组织和安排计划.这是一个开源的项目,很多细节都考虑到了,推荐大家使用~ ToDoList 帮你把要做的事情列出来,一项一项,类似思维导图. ...

  9. MySQL备份与恢复

    1.通过mysqldump命令进行数据备份 mysql数据库的备份采用直接打包数据库文件夹(注:InnoDB引擎不支持直接拷贝数据文件备份数据库,由于使用InnoDB引擎的库或表是不能使用此种方式): ...

  10. hibernate初步4

    JPA 1.JPA概述 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.,而Hi ...