oracle封装方法

来源:互联网 发布:淘客cms系统是什么 编辑:程序博客网 时间:2024/05/29 14:25

为了连接oracle数据库的方便性,写了一个工具类,每次需要对数据库的操作时,只要调用该类,写好连接数据库的语句即可,这里是对整个需要访问数据库进行了封装。

package com.yc.api.jdbc.util;import java.io.InputStream;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties;import javax.sql.DataSource;import org.apache.commons.dbcp2.BasicDataSourceFactory;import org.apache.logging.log4j.LogManager;public class DBHelper {    private static DataSource dataSource;    static {        try {            //Class.forName(DRIVER_CLASS_NAME); // 1.加载驱动            Properties props = new Properties();            props.load(DBHelper.class.getClassLoader().getResourceAsStream("db.properties"));            //使用连接池技术, 数据源DBCP            dataSource = BasicDataSourceFactory.createDataSource(props);            LogManager.getLogger().debug("加载数据库属性元素构建数据源成功...");        } catch (Exception e) {            LogManager.getLogger().error("加载数据库属性元素构建数据源!!!", e);        }    }    /**     * 建立连接     *      * @return     */    public static Connection getConn() {        Connection con = null;        try {            // 2.建立与数据库的 连接            //使用连接池技术, 数据源DBCP            con = dataSource.getConnection();            LogManager.getLogger().debug("数据库连接成功...");        } catch (Exception e) {            LogManager.getLogger().error("数据库连接失败!!!", e);        }        return con;    }    /**     * 关闭操作     *      * @param con     *            数据库连接     * @param st     *            sql执行工具     * @param rs     *            返回结果集     */    public static void close(Connection con, Statement st, ResultSet rs) {        if (rs != null) {            try {                rs.close();                LogManager.getLogger().debug("关闭结果集完成...");            } catch (SQLException e) {                LogManager.getLogger().error("关闭结果集失败!!!", e);            }        }        if (st != null) {            try {                st.close();                LogManager.getLogger().debug("关闭执行工具完成...");            } catch (SQLException e) {                LogManager.getLogger().error("关闭执行工具失败!!!", e);            }        }        if (con != null) {            try {                con.close();                LogManager.getLogger().debug("关闭数据库连接完成...");            } catch (SQLException e) {                LogManager.getLogger().error("关闭数据库连接失败!!!", e);            }        }    }    /**     *      * @param sql     *            要执行的sql语句 insert, update, delete)     * @param params     *            执行sql语句需要的参数     * @return 执行sql语句受影响的行数     */    public static int doUpdate(String sql, Object... params) {        Connection con = null;        PreparedStatement st = null;        int result = 0;        try {            con = getConn();            LogManager.getLogger().debug("要执行sql语句:" + sql);            st = con.prepareStatement(sql);            setParams(st, params); // 设置参数            LogManager.getLogger().debug("sql执行工具创建成功...");        } catch (SQLException e) {            LogManager.getLogger().error("sql执行工具创建失败!!!", e);        }        try {            result = st.executeUpdate(); // 执行sql , 针对insert, delete,                                                // update, 返回结果是受影响行数            LogManager.getLogger().debug("插入数据成功,插入数据的条数是::" + result);        } catch (SQLException e) {            LogManager.getLogger().error("插入数据失败!!!", e);        }finally{            // 5.关闭连接            DBHelper.close(con, st, null);        }        return result;    }    /**     *      * @param sql  要执行的sql语句     * @param objs 执行sql语句需要的参数     * @return  取出数据库的数据,每一条记录是一个map : key是字段名或字段别名(小写字母), value应对字段的值     */    public static List<Map<String, Object>> doQuery(String sql, Object...objs){        Connection con = null;        PreparedStatement st = null;        ResultSet rs = null;                List<Map<String, Object>> results = null;        try {            con = getConn();            st = con.prepareStatement(sql); // 3.sql执行工具            setParams(st, objs);            LogManager.getLogger().debug("sql执行工具创建成功...");        } catch (SQLException e) {            LogManager.getLogger().error("sql执行工具创建失败!!!", e);        }        try {            rs = st.executeQuery(); // 4.执行sql取到返回数据白结果集            LogManager.getLogger().debug("执行sql取到返回数据成功...");        } catch (SQLException e) {            LogManager.getLogger().error("执行sql取到返回数据失败!!!", e);        }        try {            ResultSetMetaData rsmd = rs.getMetaData(); // 元数据; 对象取取到的结果集数据的描述            int cloumCount = rsmd.getColumnCount();            results = new ArrayList<Map<String, Object>>();            while (rs.next()) { // 判断结果集是否还有数据 (数据是一条记录的方式取出)                Map<String, Object> record = new HashMap<String, Object>();                for (int i = 1; i <= cloumCount; i++) {                    //rsmd.getColumnName(i) :表的字段名或字段别名                    //rs.getObject(i) : 取到字段对应的值                    record.put(rsmd.getColumnName(i).toLowerCase(), rs.getObject(i));                }                results.add(record);            }            LogManager.getLogger().debug("取出结果集数据完成...");        } catch (SQLException e) {            LogManager.getLogger().error("取出结果集数据失败!!!", e);        } finally {            DBHelper.close(con, st, rs);        }        return results;    }    /**     *      * @param sql  要执行的sql语句     * @param objs 执行sql语句需要的参数     * @return  取出数据库的数据, key是字段名或字段别名(小写字母), value应对字段的值     */    public static Map<String, Object> doQueryOne(String sql, Object...objs){        Connection con = null;        PreparedStatement st = null;        ResultSet rs = null;        Map<String, Object> results = null;        try {            con = getConn();            st = con.prepareStatement(sql); // 3.sql执行工具            setParams(st, objs);            LogManager.getLogger().debug("sql执行工具创建成功...");        } catch (SQLException e) {            LogManager.getLogger().error("sql执行工具创建失败!!!", e);        }        try {            rs = st.executeQuery(); // 4.执行sql取到返回数据白结果集            LogManager.getLogger().debug("执行sql取到返回数据成功...");        } catch (SQLException e) {            LogManager.getLogger().error("执行sql取到返回数据失败!!!", e);        }        try {            ResultSetMetaData rsmd = rs.getMetaData(); // 元数据; 对象取取到的结果集数据的描述            int cloumCount = rsmd.getColumnCount();            if (rs.next()) { // 判断结果集是否还有数据 (数据是一条记录的方式取出)                results = new HashMap<String, Object>();                for (int i = 1; i <= cloumCount; i++) {                    //rsmd.getColumnName(i) :表的字段名或字段别名                    //rs.getObject(i) : 取到字段对应的值                    results.put(rsmd.getColumnName(i).toLowerCase(), rs.getObject(i));                }            }            LogManager.getLogger().debug("取出结果集数据完成...");        } catch (SQLException e) {            LogManager.getLogger().error("取出结果集数据失败!!!", e);        } finally {            DBHelper.close(con, st, rs);        }        return results;    }    private static void setParams(PreparedStatement st, Object... objs) {        // 判断是否有参数        if (objs == null || objs.length == 0) {            return;        }        int flag = 0;        try {            for (int i = 0; i < objs.length; i++) {                flag = i + 1;                String paramType = objs[i].getClass().getName(); // 获得参数的类型                if (Integer.class.getName().equals(paramType)) { // 判断是否是int类型                    st.setInt(i + 1, (int) objs[i]);                } else if (Double.class.getName().equals(paramType)) { // 判断是否是dobule类型                    st.setDouble(i + 1, (double) objs[i]);                } else if (String.class.getName().equals(paramType)) { // 判断是否是string类型                    st.setString(i + 1, (String) objs[i]);                } else {                    st.setObject(i + 1, objs[i]);                }            }        } catch (SQLException e) {            LogManager.getLogger().error(String.format("注入第%d值时失败!!!", flag),e);        }    }}


原创粉丝点击