1.创建一个oracle存储过程 p_empInfo2 并执行,使这段sql代码能编译存储到oracle数据库中。

 --输入员工号查询某个员工(7839)信息,将薪水作为返回值输出,给调用的程序使用
create or replace procedure p_empInfo2(i_empno IN emp.empno%TYPE, o_sal out emp.Sal%TYPE) as begin
select sal into o_sal from emp where empno = i_empno; end p_empInfo2;

2.使用jdbc调用该存储过程,环境工具:jdk1.8 intelliJ IDEA ,下载jar包 ojdbc6.jar 备用。

在IDEA中新建一个普通的java项目,建一个跟src目录平级的lib目录,把jar包拷贝进去,右键单击jar包,add as library ,如下:

然后新建一个 ProcedureTest类,调用存储过程

 package com.lch.oracle;

 import oracle.jdbc.OracleTypes;

 import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager; /**
* Java使用jdbc调用存储过程示例
*/
public class ProcedureTest {
public static void main(String[] args) throws Exception {
//1.加载驱动包
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
String userName = "scott";
String password = "tiger";
//2.获得连接对象
Connection conn = DriverManager.getConnection(url, userName, password);
//3.设置补全sql参数
String sql = "{call p_empInfo2(?,?)}"; //调用存储过程的语句
CallableStatement call = conn.prepareCall(sql);
call.setInt(1, 7839); //设置输入参数
call.registerOutParameter(2, OracleTypes.DOUBLE);//设置输出参数 —— 必须在执行存储过程之前进行注册
//4 . 执行存储过程 (如果是普通的CRUD,这里是写发送sql语句的代码)
call.execute();
//5.处理执行结果
double sal = call.getDouble(2);
System.out.println("员工薪水为:" + sal);
//6.释放资源
call.close();
conn.close();
}
}

3. 使用 Connection接口 创建CallableStatement  对象调用存储过程

Java API对 CallableStatement  接口的介绍

public interface CallableStatement extends PreparedStatement      用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT 型参数。其他参数 可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是 1。

   {?= call <procedure-name>[<arg1>,<arg2>, ...]}
{call <procedure-name>[<arg1>,<arg2>, ...]}
IN 参数值是使用从 PreparedStatement 中继承的 set 方法设置的。在执行存储过程之前, 必须注册所有 OUT 参数的类型;它们的值是在执行后通过此类提供的 get 方法检索的。
CallableStatement 可以返回一个 ResultSet 对象或多个 ResultSet 对象。多个 ResultSet 对象是使用从 Statement 中继承的操作处理的。为了获得最大的可移植性,某一调用的 ResultSet 对象和更新计数应该在获得输出参数的值之前处理。

 

JDBC调用oracle 存储过程的更多相关文章

  1. jdbc调用 oracle 存储过程操作

    创建有参存储函数findEmpNameAndSal(编号),查询7902号员工的的姓名和月薪,[返回多个值,演示out的用法]当返回2个或多个值,必须使用out符号当返回1个值,就无需out符号 cr ...

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

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

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

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

  4. MyBatis调用Oracle存储过程

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

  5. C#调用Oracle存储过程

    C#调用Oracle存储过程的代码如下所示: using System; using System.Collections.Generic; using System.Collections.Obje ...

  6. C#调用 oracle存储过程

    C#调用oracle 存储过程与调用Sql server存储过程类似,比较简单:直接给出示例: /// <summary> /// 判断物料类型是不是总部管控 /// </summa ...

  7. 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  8. c#调用oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  9. C#调用Oracle存储过程的方法

    C#调用Oracle存储过程的方法 准备: 环境:pl/sql+oracle9i+vs2008 创建表test: create table TEST(  ID      NUMBER,//编号  NA ...

随机推荐

  1. CSU 1554 SG Value (multiset/priority queue 思维题)

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554 Description The SG value of a set (mult ...

  2. Add hatch to bar plot

    function applyhatch(h,patterns,colorlist) %APPLYHATCH Apply hatched patterns to a figure % APPLYHATC ...

  3. String 与StringBuffer习题

    1: 画出如下几行代码的结构 // 画出如下几行代码的结构 String s1 = "hello"; // value存储在常量池内 String s2 = "hello ...

  4. 测开之路七十三:用kafka实现消息队列之环境搭建

    一:装java环境,确保java能正确调用 kafka下载地址:http://kafka.apache.org/downloads 下载并解压kafka: 新建两个文件夹,用于存放zookeeper和 ...

  5. python字符串常见操作

    字符串常见操作 如有字符串mystr = 'hello world itcast and itcastcpp',以下是常见的操作 <1>find 检测 str 是否包含在 mystr中,如 ...

  6. 认识requests库,以及安装方法

    1.学习requests库有什么意义 1)对我来说,我是测试人员,我用它来解决HTTP接口自动化测试 2)写爬虫需要用到requests 3)如果是开发人员,需要些接口,了解requests有助于掌握 ...

  7. tensorflow学习框架(炼数成金网络版学习记录)

    chapter1 #变量 import tensorflow as tf x = tf.Variable([1,2]) a = tf.constant([3,3]) #增加一个减法op sub = t ...

  8. Ubuntu TTy字体

    目的:修改tty终端下的字体大小,中文显示,字体美观问题 Linux版本:xubuntu14.04 当切换到tty终端模式式,中文乱码,且字体太小,影响阅读.在网上搜了一些资料,将问题及解决方案记录如 ...

  9. LOJ 2183 / SDOI2015 序列统计 (DP+矩阵快速幂)

    题面 传送门 分析 考虑容斥原理,用总的方案数-不含质数的方案数 设\(dp1[i][j]\)表示前i个数,和取模p为j的方案数, \(dp2[i][j]\)表示前i个数,和取模p为j的方案数,且所有 ...

  10. hdu6354 Everything Has Changed (圆的相交弧长)

    题目传送门 题意: 用一堆圆来切割一个圆心为原点,半径为R的圆A,问切割完毕后圆A外围剩余部分的周长(图中的红线部分). 思路: 首先判定圆与圆A的关系,这题我们只需要与A内切.相交的圆. 然后就是求 ...