一、环境准备

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

1、创建 proc_getyearsal 存储过程

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

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

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

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

二、java代码示例

  1. package com.pri.test;
  2.  
  3. public class TestProcedure {
  4.  
  5.   /*
  6.     java调用存储过程模板(一)
  7.     获取单值操作
  8.   */
  9. @Test
  10. public void test01() throws Exception {
  11. //1.注册驱动
  12. Class.forName("oracle.jdbc.driver.OracleDriver");
  13. //2.获取连接
  14. String url = "jdbc:oracle:thin:@10.211.55.29:1521/orcl";
  15. String user = "zhangsan";
  16. String password = "zs123";
  17. Connection conn = DriverManager.getConnection(url, user, password);
  18. //3.获取执行SQL的对象
  19. String sql = "{call proc_getyearsal(?,?)}";
  20. CallableStatement callableStatement = conn.prepareCall(sql);
  21. //3.1 设置输出参数
  22. callableStatement.setInt(1,7369);
  23. //3.2 注册输出类型
  24. callableStatement.registerOutParameter(2, Types.DOUBLE);
  25. //4.执行SQL
  26. callableStatement.execute();
  27. //5.执行结果
  28. double yearsal = callableStatement.getDouble(2);
  29. System.out.println("年薪:"+yearsal);
  30. //6.释放资源
  31. callableStatement.close();
  32. conn.close();
  33. }
  34.   
  35.   /*
  36.    java调用存储过程模板(二)
  37.     多行记录(游标)操作
  38.   */
  39. @Test
  40. public void test03() throws Exception {
  41. //1.注册驱动
  42. Class.forName("oracle.jdbc.driver.OracleDriver");
  43. //2.获取连接
  44. String url = "jdbc:oracle:thin:@10.211.55.29:1521/orcl";
  45. String user = "zhangsan";
  46. String password = "zs123";
  47. Connection conn = DriverManager.getConnection(url, user, password);
  48. //3.获取执行SQL的对象
  49. String sql = "{call proc_gettemps(?)}";
  50. CallableStatement callableStatement = conn.prepareCall(sql);
  51. //3.1 注册输出类型
  52. callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
  53. //4.执行SQL
  54. callableStatement.execute();
  55. //5.获取结果
  56. System.out.println(callableStatement.getClass().getName());
  57. // T4CCallableStatent call2 = () callableStatement;
  58. OracleCallableStatement call2 = (OracleCallableStatement) callableStatement;
  59. ResultSet rs = call2.getCursor(1);
  60.  
  61. while(rs.next()){
  62. System.out.println(rs.getObject("empno"));
  63. System.out.println(rs.getObject("ename"));
  64. System.out.println(rs.getObject("sal"));
  65. System.out.println("------------------------");
  66. }
  67. //6.释放资源
  68. rs.close();
  69. callableStatement.close();
  70. conn.close();
  71. }
  72.  
  73. }

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. 【git】——简单用法

    git 更新远程代码到本地 git fetch origin master git merge origin/master 冲突: Your local changes to the followin ...

  2. linux安装scala环境

    (安装scala的前提是已经安装好了jdk) 1.下载scala的安装包 wget https://scala-lang.org/files/archive/scala-2.11.0-M2.tgz 2 ...

  3. c语言求方阵的行列式、伴随矩阵算法

    #include<stdio.h> #include<math.h> #define N 100 //N比输入的阶数大即可 int main() {   int n,a[N][ ...

  4. SSAS 收藏

    1.多事实表 SQL实现和SSAS中MDX实现的差异 2.层次结构 3.MDX常用几种查询对比 4.一段话理解 MDX中的Select .轴.COLUMNS.ROWS 5.[转载]MSDN-MDX#0 ...

  5. ltp-ddt eth过程中遇到的问题

    eth_iperf_tcp ETH_S_PERF_IPERF_TCP_INTPACING_8K_1448B source 'common.sh'; iface=`get_eth_iface_name. ...

  6. Python基础部分的疑惑解析——运算符和数据类型(3)

    补充上一篇: #! /user/bin/env python   代码内声明这一个就可以用1.py类似的文件直接执行,但是要在linux内加权限, 不需要在前面加python 1.py执行了.文件可以 ...

  7. pycharm连接数据库出现时区jdbc问题

    unrecognized or represents more than one time zone. You must configure either the server or JDBC dri ...

  8. C#接口实现多态

    我比较喜欢对感兴趣的理论进行反复的理解甚至理解背诵下来,接下来再复习一下什么叫多态(哈哈哈) 多态:在同一粒度视图下对相同类型的事物不做区别的统一操作 接下来看一下接口和引擎类是如何实现多态的: 一. ...

  9. Hexo博客系列(二)-在多台机器上利用Hexo发布博客

    [原文链接]:https://www.tecchen.xyz/blog-hexo-env-02.html 我的个人博客:https://www.tecchen.xyz,博文同步发布到博客园. 由于精力 ...

  10. CF1083(Round #526 Div. 1) 简要题解

    题目链接 https://codeforces.com/contest/1083 简要题目翻译 题解 A. The Fair Nut and the Best Path 可以忽略掉"任意时刻 ...