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. 富文本编辑器嵌入指定html代码

    先把内容放入一个input中 <input id="detail" type="hidden" value="${sysCarousel.det ...

  2. vijos1101题解

    题目: 研究表明,这种传染病的传播具有两种很特殊的性质: 第一是它的传播途径是树型的,一个人X只可能被某个特定的人Y感染,只要Y不 得病,或者是XY之间的传播途径被切断,则X就不会得病. 第二是,这种 ...

  3. Servlet Filter 中init和destroy问题

    测试源码如下: package com.FilterTest.Filter; import java.io.IOException; import javax.servlet.Filter; impo ...

  4. hdu 3926 hands in hands

    https://vjudge.net/problem/HDU-3926 题意:有n个小朋友,他们之间手拉手,但是一只手只能拉一只手或者不拉,现在给出两个图,表示拉手关系,问这两个图是否同构.思路:一开 ...

  5. Centos 7部署大众点评CAT(二)——双服务器部署

    在单机上部署CAT,只是在做实验,在生产环境则不可能只用单台服务器监控多个应用. 下面简单介绍一下双服务器的部署,各位有更多硬件资源作为监控服务端的朋友,如果对CAT集群有兴趣,可以参看这篇拙作. 资 ...

  6. git创建版本库以及使用

    Git使用教程(摘自tugenhua0707) 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央 ...

  7. background:rgba() 兼容ie8 用法

    background: rgba(255,255,255,.1);//火狐,谷歌等 filter:progid:DXImageTransform.Microsoft.gradient(startCol ...

  8. SVN常见问题

    one or more files are in a conflicted state.(一个或多个文件处于矛盾状态)意思是这个文件已经被其他人修改过了. 然后我点击ok按钮后,找到冲突的文件再次up ...

  9. win10下安装python2与python3以及pip共存

    一 分别安装python2和python3 注意: 安装时记得勾选 Add Python.exe to Path 二 安装pip Python3最新版本有pip,无需安装 Python2: 下载pip ...

  10. Java并发编程(2):线程中断(含代码)

    使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回.这 ...