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. Python3 面向对象程序设计(类)

    一.自定义类 1.属性与方法 格式: class classname: def __init__(self,a,b): self.a=a   self.b=b def ... >一般都有一个__ ...

  2. Angular--ui-router的使用

    先引用Angular然后引用ui-router 路由清单:我们依赖的ui.router中提供了一个服务$state,此时可以用config来配置这个服务.用$stateProvider的state方法 ...

  3. 使用gulp实现文件压缩及浏览器热加载

    一.安装gulp 首先,你要安装过nodejs,如果没有安装过的同学请自行下载.  先再命令行里输入   npm install gulp -g   下载gulp 二.创建gulp项目 创建一个你需要 ...

  4. Android Studio 自动生成 Java Doc

    Android Studio 生成 Java Doc 出现"编码GBK的不可映射字符"问题 错误的解决方案,复制粘贴一万遍也是错误的,下面是查找出来的,没有用的解决方案(还有几个, ...

  5. java核心机制

    Java中有两种核心机制:Java虚拟机(Java Virtual Machine).垃圾收集机制(Garbage collection) 一.核心机制之Java虚拟机 ① Java虚拟机可以理解成一 ...

  6. The first day,I get a blogs!!

    我拥有了自己的博客,很happy! 今天学习了kvm,虽然命令行界面比较枯燥,还好不算太难,在大家的热心帮助下我创建了一个虚拟机!!

  7. 51nod_1040:最大公约数之和(数论)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 给出一个n,求1-n这n个数,同n的最大公约数的和. ...

  8. Certificates does not conform to algorithm constraints

    今天在开发时遇到一个新问题:Certificates does not conform to algorithm constraints,在此记录一下解决方案. 问题详情: [ERROR] Faile ...

  9. 关于Class.forName(className).newInstance()介绍

    Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和new 不一样,要分清楚). 至于什么时候 ...

  10. Java-认识变量、注释并能及时发现错误

    package com;//变量的演示public class VarDemo { public static void main(String[] args) { /* * 1)题目不用抄 2)注释 ...