使用JDBC调用Oracle存储过程或存储函数

记录一次开发中从java调用oracle中的程序包

编写JDBC连接工具类:

import java.sql.*;

/**
 * @Title  JDBC工具类demo
 * @Desc create by heavent 2018/6/28
 **/
public class JDBCUtil {

    private static String url = "jdbc:oracle:thin:@//数据库ip:端口号/数据库";
    private static String username = "用户名";
    private static String password = "用户密码";
    //private static String driver = "oracle.jdbc.OracleDriver";
    private static String driver = "oracle.jdbc.driver.OracleDriver";

    //注册驱动
    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    //获取数据连接
    public static Connection getConnection(){
        try {
            return DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //释放数据库资源
    public static void release(Connection conn, Statement statement, ResultSet resultSet){
        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                resultSet = null;
            }
        }

        if(statement != null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                statement = null;
            }
        }

        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                conn = null;
            }
        }

    }

}

调用程序包存储过程(数据集合返回的处理)案例:

public static void main(String[] args){
        /**
         * 调用程序包
         * create or replace package p_index_statistic
         * as
         *   function get_pic return varchar;
         *   function set_pic(pic in varchar) return varchar;
         *   function get_pic_arr return varchar;
         *   function set_pic_arr(pic_arr in varchar) return varchar;
         *   function get_bg_arr return varchar;
         *   function set_bg_arr(bg_arr in varchar) return varchar;
         *
         *   type tempcursor is ref cursor;
         *   procedure get_index_statistic(pic in varchar, pic_arr in varchar, bg_arr in varchar, setResult out tempcursor);
         *
         * end p_index_statistic;
         */
        String sql = "{call p_index_statistic.get_index_statistic(?, ?, ?, ?)}";

        Connection conn = null;
        CallableStatement call = null;
        ResultSet resultSet = null;
        try{
            conn = JDBCUtil.getConnection();
            call = conn.prepareCall(sql);

            //对于in参数 赋值  数字下标对应string sql中?的位置,从1开始
            call.setString(1,"'heavent'");
            call.setString(2,"'heavent','tom','james'");
            call.setString(3,"'财务部','营销部'");

            //对于out参数 声明游标OracleTypes.CURSOR  
            call.registerOutParameter(4, OracleTypes.CURSOR);
            //执行调用
            call.execute();
            //取出结果集
            resultSet = ((OracleCallableStatement) call).getCursor(4);
            int num = 0;
            while(resultSet.next()){
                num++;
                System.out.println(resultSet.getString("pic"));
                System.out.println(resultSet.getString("companiesNum"));
                System.out.println(resultSet.getString("tradingNum"));
                System.out.println(resultSet.getString("valueAlertNum"));
                System.out.println(resultSet.getString("recordNum"));
                System.out.println(resultSet.getString("dividendNum"));
            }
            //System.out.println(num);
        } catch (Exception e) {
            e.printStackTrace();
            JDBCUtil.release(conn, call, resultSet);
        }
    }

调用程序包存储函数案例:

public static void main(String[] args){
        /**
         * 调用程序包中存储函数
         * create or replace package p_company_statistic
         * as
         *   function get_iqid_data(pic_arr in varchar, bg_arr in varchar) return varchar;
         * end p_company_statistic;
         */
        String sql = "{?=call p_company_statistic.get_iqid_data(?, ?)}";

        Connection conn = null;
        CallableStatement call = null;
        ResultSet resultSet = null;
        try{
            conn = JDBCUtil.getConnection();
            call = conn.prepareCall(sql);

            //对于返回参数 类型  数字下标对应string sql中?的位置,从1开始
            call.registerOutParameter(1, OracleTypes.VARCHAR);
            //对于in参数 赋值
            call.setString(2,"'MAYRAO'");
            call.setString(3,"'IEG'");
            //执行
            call.execute();

            System.out.println(call.getString(1));
        } catch (Exception e) {
            e.printStackTrace();
            JDBCUtil.release(conn, call, resultSet);
        }
    }



猜你喜欢

转载自blog.csdn.net/baidu_36720706/article/details/80945656