public class JdbcTest {
    
    private Connection conn = null;
    private PreparedStatement pst = null;
    private ResultSet rs = null;
    

    @Before
    public void init() throws Exception {
        //加载数据库驱动
        Class.forName(driver);
        //获取Connection对象
        conn = DriverManager.getConnection(url, username, password);
    }
    
    @After
    public void close() throws Exception{
        //释放资源
        if(rs!=null)
            rs.close();
        if(pst!=null)
            pst.close();
        if(conn!=null)
            conn.close();
    }

    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@192.168.197.10:1521:orcl";
    String username = "scott";
    String password = "tiger";
    
    //查询oracle数据库中scott用户下emp表记录
    @Test
    public void findEmps() throws Exception {
        //获取PreparedStatement
        pst = conn.prepareStatement("select * from emp");
        //执行sql
        rs = pst.executeQuery();
        //处理ResultSet
        while(rs.next()){
            System.out.println("编号:"+rs.getInt("empno")+",姓名:"+rs.getString("ename"));
        }
    }

    /**
      * @Description: 调用存储过程
      *
      * create or replace procedure pro_add_sal(eno in number,money in number)
      *
      *
      * CallableStatement
      *      用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用
      *标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,
      *则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个
      *参数的编号是 1。

           {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}  --调用函数
           {call <procedure-name>[(<arg1>,<arg2>, ...)]}     --调用过程

     */
    @Test
    public void callProcedure() throws Exception {
        //加载数据库驱动
        Class.forName(driver);
        //获取Connection对象
        Connection conn = DriverManager.getConnection(url, username, password);
        //返回执行存储过程接口
        CallableStatement cst = conn.prepareCall("{call pro_add_sal(?, ?)}");
        //设置参数值
        cst.setInt(1, 7369);
        cst.setInt(2, 100);
        //执行过程
        cst.execute();
        
        //释放资源
        if(cst!=null)
            cst.close();
        if(conn!=null)
            conn.close();
    }
    
    
    /**
     * @Description: 调用存储过程有输出结果
     *
     * create or replace procedure pro_total_sal(eno in number, t out number)
     *
     * CallableStatement
     *      用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用
     *标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,
     *则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个
     *参数的编号是 1。

           {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}  --调用函数
           {call <procedure-name>[(<arg1>,<arg2>, ...)]}     --调用过程

     */
    @Test
    public void callProcedureOutParmeter() throws Exception {
        //加载数据库驱动
        Class.forName(driver);
        //获取Connection对象
        Connection conn = DriverManager.getConnection(url, username, password);
        //返回执行存储过程接口
        CallableStatement cst = conn.prepareCall("{call pro_total_sal(?, ?)}");
        //设置参数值
        cst.setInt(1, 7369);
        //注册为 OUT 参数 void registerOutParameter(int parameterIndex, int sqlType)
        //按顺序位置 parameterIndex 将 OUT 参数注册为 JDBC 类型 sqlType。
        cst.registerOutParameter(2, OracleTypes.NUMBER);
        //执行过程
        cst.execute();
        
        //获取返回输出参数结果
        System.out.println(cst.getObject(2));
        //释放资源
        if(cst!=null)
            cst.close();
        if(conn!=null)
            conn.close();
    }
    
    
    /**
     * @Description: 调用存储过程有输出参数是游标类型
     *
     * create procedure pro_emp_list(dno in number, emplist out sys_refcursor)
     *
     * CallableStatement
     *      用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用
     *标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,
     *则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个
     *参数的编号是 1。

           {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}  --调用函数
           {call <procedure-name>[(<arg1>,<arg2>, ...)]}     --调用过程

     */
    @Test
    public void callProcedureOutParmeterCursor() throws Exception {
        //加载数据库驱动
        Class.forName(driver);
        //获取Connection对象
        Connection conn = DriverManager.getConnection(url, username, password);
        //返回执行存储过程接口
        CallableStatement cst = conn.prepareCall("{call pro_emp_list(?, ?)}");
        //设置参数值
        cst.setInt(1, 20);
        //注册为 OUT 参数 void registerOutParameter(int parameterIndex, int sqlType)
        //按顺序位置 parameterIndex 将 OUT 参数注册为 JDBC 类型 sqlType。
        cst.registerOutParameter(2, OracleTypes.CURSOR);
        //执行过程
        cst.execute();
        
        //获取返回输出参数结果
        OracleCallableStatement ocs = (OracleCallableStatement) cst;
        ResultSet rs = ocs.getCursor(2);
        while(rs.next()){
            System.out.println(rs.getString("ename"));
        }
        
        //释放资源
        if(ocs!=null)
            ocs.close();
        if(cst!=null)
            cst.close();
        if(conn!=null)
            conn.close();
    }
    
    
    /**
     * @Description: 调用函数
     *
     * create or replace function fun_emp_toalsal(eno in number) return number
     *
     * CallableStatement
     *      用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是 1。

           {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}  --调用函数
           {call <procedure-name>[(<arg1>,<arg2>, ...)]}     --调用过程

     */
    @Test
    public void callFunction() throws Exception {
        //加载数据库驱动
        Class.forName(driver);
        //获取Connection对象
        Connection conn = DriverManager.getConnection(url, username, password);
        //返回执行存储过程接口
        CallableStatement cst = conn.prepareCall("{? = call fun_emp_toalsal(?)}");
        //设置参数值
        cst.setInt(2, 7369);
        //注册为 OUT 参数 void registerOutParameter(int parameterIndex, int sqlType)
        //按顺序位置 parameterIndex 将 OUT 参数注册为 JDBC 类型 sqlType。
        cst.registerOutParameter(1, OracleTypes.NUMBER);
        //执行过程
        cst.execute();
        
        //获取返回输出参数结果
        System.out.println(cst.getObject(1));
        //释放资源
        if(cst!=null)
            cst.close();
        if(conn!=null)
            conn.close();
    }
    
    
    
}

使用jdbc调用存储,函数的更多相关文章

  1. Spring JDBC调用存储函数

    以下示例将演示spring jdbc如何调用存储函数.在这个示例中将通过调用存储函数来读取Student表中的一个可用记录信息.传递一个ID并获取学生的姓名. 语法: SimpleJdbcCall j ...

  2. oracle 应用程序调用存储函数

    package com.founder.ec.common.lucene; import java.sql.CallableStatement; import java.sql.Connection; ...

  3. 使用 JDBC 调用函数 & 存储过程

    /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connection connectio ...

  4. java程序调用存储过程和存储函数

    java程序调用存储过程 jdbcUtil.java文件 package cn.itcast.oracle.utils; import java.sql.Connection; import java ...

  5. Java代码调用Oracle的存储过程,存储函数和包

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

  6. java调用Oracle中的存储过程与存储函数

    1 //调用存储过程 2 public static void testPro(){ 3 String driver = "oracle.jdbc.OracleDriver"; 4 ...

  7. php中调用mysql的存储过程和存储函数

    //$sql = 'call del()';  调用存储过程 del(参数列表)//mysql_query($sql); $sql = "insert into t values (1, f ...

  8. day70-oracle 12-Java调用存储过程和存储函数

    我们现在调用的是存储过程和存储函数.用CallableSatement调用存储函数和存储过程. RDBMS:关系数据库.使用标准方式调用存储过程.也就是说:在mysql中调用和在oracle中调用的写 ...

  9. MySQL 存储函数的创建、调用、查找

    MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数 1.创建存储函数:使用 create function关键字 2.调用存储函数: 3.示例: ...

随机推荐

  1. 使用docker-compose搭建AspNetCore开发环境

    1 使用docker-compose搭建开发环境 我们的目标很简单:使用docker-compose把若干个docker容器组合起来就成了. 首先使用Nginx代理所有的Web程序,这样只需要在主机上 ...

  2. Randoop测试类和方法(用例自动生成)

    详细使用方法见randoop官网: https://randoop.github.io/randoop/manual/index.html 测试程序之前,先检测下你的Randoop是否配置好: 打开c ...

  3. java IO之 编码 (码表 编码 解码 转换流)

    编码 什么是编码? 计算机中存储的都是二进制,但是要显示的时候,就是我们看到的却可以有中国 ,a  1 等字符 计算机中是没有存储字符的,但是我们却看到了.计算机在存储这些信息的时候,根据一个有规 则 ...

  4. str-字符串功能介绍

    叨逼叨:字符串的各个功能修改不是本身,本身不变,会产生新的值,需要赋值给新的变量来接收 以下 "举例" 是解释每个功能的实例   "举例"下一行是pycharm ...

  5. Java IO在实际开发中的应用

    IO是java绕不过去的槛,在开发中io无处不在, 正如同 世界上本没有路,java io写多了,也就知道了大体是什么意思,在读完thinking in java 感觉就更清晰了,结合具体的业务场景, ...

  6. js验证表单密码、用户名是否输入--JS的简单应用

    在登录.注册时,我们经常会遇到下面这种情况,如果我们没有输入用户名.密码时,系统会弹出提示框.提示框信息提示内容是我们密码没有输入密码或者用户名等.那么这样的弹出框效果是如何实现的呢?文章标题既然与j ...

  7. window10(64bit)+VS2010编译ACE_TAO源码库

    1.下载 ACE+TAO下载地址:http://download.dre.vanderbilt.edu/previous_versions/ VS2010下载地址:https://pan.baidu. ...

  8. IDEA 单元测试testng入门及testng.xml

    直接进入正题: 1.TestNG的运行方式如下: With a testng.xml file 直接run as test suite With ant 使用ant From the command ...

  9. 定时器(setTimeout)的秘密

    原文地址:→传送门 写在前面 setTimeout()是大家再熟悉不过的定时器,但平时对定时器的了解甚少,于是想看看setTimeout()的原理机制. setTimeout()基础 setTimeo ...

  10. zookeeper单机模式安装

    zookeeper单机模式安装 更多文章:http://blogxinxiucan.sh1.newtouch.com/2017/07/26/zookeeper单机模式安装/ 下载zookeeper u ...