一、环境准备

 登录Oracle数据库scott账号,利用emp进行操作。

1、创建 proc_getyearsal 存储过程

 -- 获取指定员工年薪
create or replace procedure proc_getyearsal(vempno in number,vyearsal out number)
is begin
select sal*12+nvl(comm,0) into vyearsal from emp where empno=vempno;
end;

2、创建 proc_gettemps 存储过程(游标)

 create or replace procedure proc_gettemps(vemps out sys_refcursor)
is
BEGIN
open vemps for select * from emp where deptno = 20;
end;

3、导入数据库驱动包 —— ojdbc14.jar

二、java代码示例

 package com.pri.test;

 public class TestProcedure {

   /*
    java调用存储过程模板(一)
    获取单值操作
  */
@Test
public void test01() throws Exception {
//1.注册驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.获取连接
String url = "jdbc:oracle:thin:@10.211.55.29:1521/orcl";
String user = "zhangsan";
String password = "zs123";
Connection conn = DriverManager.getConnection(url, user, password);
//3.获取执行SQL的对象
String sql = "{call proc_getyearsal(?,?)}";
CallableStatement callableStatement = conn.prepareCall(sql);
//3.1 设置输出参数
callableStatement.setInt(1,7369);
//3.2 注册输出类型
callableStatement.registerOutParameter(2, Types.DOUBLE);
//4.执行SQL
callableStatement.execute();
//5.执行结果
double yearsal = callableStatement.getDouble(2);
System.out.println("年薪:"+yearsal);
//6.释放资源
callableStatement.close();
conn.close();
}
  
  /*
   java调用存储过程模板(二)
    多行记录(游标)操作
  */
@Test
public void test03() throws Exception {
//1.注册驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.获取连接
String url = "jdbc:oracle:thin:@10.211.55.29:1521/orcl";
String user = "zhangsan";
String password = "zs123";
Connection conn = DriverManager.getConnection(url, user, password);
//3.获取执行SQL的对象
String sql = "{call proc_gettemps(?)}";
CallableStatement callableStatement = conn.prepareCall(sql);
//3.1 注册输出类型
callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
//4.执行SQL
callableStatement.execute();
//5.获取结果
System.out.println(callableStatement.getClass().getName());
// T4CCallableStatent call2 = () callableStatement;
OracleCallableStatement call2 = (OracleCallableStatement) callableStatement;
ResultSet rs = call2.getCursor(1); while(rs.next()){
System.out.println(rs.getObject("empno"));
System.out.println(rs.getObject("ename"));
System.out.println(rs.getObject("sal"));
System.out.println("------------------------");
}
//6.释放资源
rs.close();
callableStatement.close();
conn.close();
} }

Oracle数据库基本操作 (五) —— 使用java调用存储过程的更多相关文章

  1. clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...

  2. Oracle数据库基本操作(一) —— Oracle数据库体系结构介绍、DDL、DCL、DML

    一.Oracle数据库介绍 1.基本介绍 Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/ ...

  3. java调用存储过程(stored procedures)的HelloWorld例子

    1.java调用存储过程(stored procedures)的HelloWorld程序 有点数据 库基础的人都知道.存储过程(stored procedures)和java没什么关系.它是一段纯粹的 ...

  4. Oracle数据库date类型与Java中Date的联系与转化

    以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助.new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前 ...

  5. Oracle数据库基本操作(四) —— PLSQL编程

    Procedure Language 实际上是Oracle对SQL语言的能力扩展,让SQL语言拥有了if条件判断,for循环等处理. 一.PLSQL基本语法 DECLARE -- 声明部分 变量名 变 ...

  6. 【转】java调用存储过程和函数

    一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...

  7. Java调用存储过程小结

    学生在学习jdbc的时候,会问到怎么调用存储过程,现在将java调用oracle存储过程的示例总结如下.(关于调用sqlserver的存储过程将在下次进行小结请关注) 一:无返回值的存储过程 存储过程 ...

  8. Java 调用存储过程 返回结果集

    这里使用Oracle数据库的thin连接. 下面是存储过程SQL 1 createorreplaceprocedure proc3(stid in student.stuid%type, stname ...

  9. java调用存储过程和函数

    以对表test进行增,删,改,查进行说明:1.新建表test create table TEST ( TID NUMBER not null, TNAME VARCHAR2(32), TCODE VA ...

随机推荐

  1. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option)

    今天运行Redis时发生错误,错误信息如下: org.springframework.dao.InvalidDataAccessApiUsageException: MISCONF Redis is ...

  2. (转)Javascript模块化编程(三):Require.js的用法

    转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...

  3. spring-boot-maven-plugin多模块install问题解决办法

    一.问题描述: 项目分多个模块,open-eureka注册中心.open-provider服务提供者.open-common公共部分,provider依赖common.父pom使用spring-boo ...

  4. Eclipse中创建SpringBoot项目流程,及报错解决方案

    1.下载最新的Eclipse(老版本的有可能不包含springBoot插件),然后在help中打开Eclipse MarketPlace,在Spring Marketplace 中搜索SpringBo ...

  5. sourceTree"重置提交"和"提交回滚"的区别

    相信用过sourceTree的伙伴们都认识这两,但是不一定用过这两个功能,甚至是不能很好的把握它两的区别,根据自己最近亲身测试,总算是能小小的总结一下了 首先这儿假如,历史版本已经出现了1.2.3.4 ...

  6. 认识CSS中字体图标

    前端之HTML,CSS(十一) 字体图标 使用文字做出小图标的效果并超越了小图标应用精灵图,使得图标变得灵活,减少了请求次数,优化了界面的性能.字体图标本身为矢量图. 字体图标的使用过程 1.UI设计 ...

  7. 造一个轮子然后安装到pypi上

    之前写了一个爬虫的包,主要是根据自己写爬虫的情况总结一下. 因为每次都要重复写一些代码,所以提炼出来,类似一个框架的样子吧. 开始是放在自己的项目里引用,但如果换了一个项目,就得重新拷一遍,很麻烦. ...

  8. e的理解

    1. e是一个重要的常数,但是我一直不知道,它的真正含义是什么. 它不像π.大家都知道,π代表了圆的周长与直径之比3.14159,可是如果我问你,e代表了什么.你能回答吗? 维基百科说: " ...

  9. 修改zend studio字体大小

    第一步:进入设置窗口    windows -> preferences第二步:进入修改字体的选项卡.    General -> Appearance -> Colors and ...

  10. Comet技术在Java Web中的应用

    HTTP协议是互联网上大量信息交换的基础,其特点是,它是基于请求-响应模式的无状态的单向协议,即,必须由客户端发起一个请求建立连接,服务器接收请 求,把数据返回给客户端,然后释放连接.下一次,再由客户 ...