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. kbengine服务端引擎技术概览

    http://www.kbengine.org/assets/other/KBEngine_overview.zip

  2. SQLite的总结与在C#的使用

    这几天接触了一下SQLite,算是有点收获吧,因此总结一下. SQLite简介: SQLite是用C语言编写的数据库引擎,可以运行在Linux.Windows.Mac平台上. SQLite安装简单,下 ...

  3. Vijos 1011 清帝之惑之顺治 记忆录式的动态规划(记忆化搜索)

    背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位 ...

  4. Java 泛型在实际开发中的应用

    java泛型是对Java语言的类型系统的一种扩展,泛型的本质就是将所操作的数据类型参数化.下面我会由浅入深地介绍Java的泛型. 一:泛型出现的背景 在java代码里,你会经常发现类似下边的代码: p ...

  5. JavaWeb 后端 <十> 之 数据池 C3P0 DPCB JNDI

    一.数据库连接池原理:(理解) //模拟数据库连接池的原理 public class ConnectionPoolDemo { private static List<Connection> ...

  6. springBoot基础系列--properties配置

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分手动配置,但是对于一些特定的情况, ...

  7. Nginx 反向代理、负载均衡

    ## Nginx 反向代理. (一)简介 一.什么是代理服务器 客户机原本发送给服务器的请求,不会直接发送给服务器,而是先发送给代理服务器:经过代理服务器处理后转发给服务器:服务器数据处理后转回给代理 ...

  8. 新篇章之我的java学习之路上

    现在我怀着激动和兴奋的心情来写我的第一篇博客,谈谈我自己的学习java的这段历程. 我大学学的软件工程专业,学校开设过c++,数据结构,java,Android等等这类的关于开发的相关课程,但是在学校 ...

  9. 怎么在linux ubuntu 上的nginx 绑定域名

    前一篇介绍了,如果在ubuntu上运行nodejs,毕竟访问的时候都是用ip地址+端口号,但是上production 环境都需要域名的,IP地址当然不行 读过上一篇的朋友知道了,如果在upstart ...

  10. 关于ubuntu服务器上部署postgresql 以及安装pgadmin4管理工具(web版)

    进入目录:cd pgadmin4   source bin/activate     cd pgadmin4-1.6/ 启动pgadmin4:python web/pgAdmin4.py pgadmi ...