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. VUE2.0+VUE-Router做一个图片上传预览的组件

    之前发了一篇关于自己看待前端组件化的文章,但是由于学习和实践的业务逻辑差异,所以自己练习的一些demo逻辑比较简单,打算用vue重构现在公司做的项目,所以在一些小的功能页面上使用vue来做的,现在写的 ...

  2. 百万级数据mysql分区

    1. 什么是表分区? 表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分.从逻辑上看,只有一张表,但是底层却是由多个物理分区组成. 2. 表分区与分表的区别 分表:指的是通过 ...

  3. 今天真开心,终于知道怎么打包apk了

    1.函数上下文的产生,并不是函数定义时决定的,而是函数调用时产生的:来个栗子 function creep(){return this;} console.log(creep()) var sneak ...

  4. mybatis存取blob对象+@Cacheable实现数据缓存

    参考文档: http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 需求场景: 当前业务通过第三方接口查询一个业务数据, ...

  5. VB6之阴影图层

    要是能创建半透明的刷子就好了,就不必像这样以图层的方式实现透明阴影效果. 代码: 'code by lichmama@cnblogs.com '绘制阴影图层 Private Declare Funct ...

  6. JAVA - 深入JAVA 虚拟机 1

    Java虚拟机与程序的生命周期 Java虚拟机将结束生命周期 1.call System.exit(n) Terminates the currently running JVM. 2.程序正常执行结 ...

  7. 详解Linux chgrp和chown命令的用法

    Linux chgrp和chown命令是管理员的常用命令,对于初学Linux系统管理的人来说,这对Linux chgrp和chown命令具体的用法这里做一介绍. Linux chgrp命令 功能:改变 ...

  8. HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配)

    HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配) Description The zoo have N cats and M dogs, toda ...

  9. docker学习笔记--重基础使用

    最近一直在研究Elasticsearch,后来部门的同事遇到了一个docker集群的未授权访问漏洞,于是稍微看了一下docker进行了一下基本的入门,本文把自己学习docker的过程进行了一个详细的记 ...

  10. PHP+js实现图片上传,编辑

    文件上传,点击按钮并选择文件后,文件会临时存到一个位置,会有一个临时名字: 然后在php文件中处理,给文件起名并将文件从临时为止搬到服务器,把需要的文件信息返回给前端页面: 最后表单提交时,把文件信息 ...