数据库连接池工具类

对数据库连接池封装的curd工具类

在不使用持久化框架的情况下,使用数据库连接池,同时对CURD进行一定的封装,简化jdbc的使用
数据库连接池工具类,可以根据自己的情况使用其他数据库连接池
下面的连接池为(com.mchange.v2.c3p0.ComboPooledDataSource)


/**
 * 对ComboPooledDataSource 进行封装 使用数据库连接池对连接进行管理
 * author:hand
 * 2021年10月20日16:11:12
 * **/

public class MyDatabaseLinkPool {
    private static ComboPooledDataSource dataSource;
    private static String user="root";
    private static String password="123456";
    private static String url="jdbc:mysql://127.0.0.1:3306/flink?useUnicode=true&characterEncoding=utf-8";
     static {
            /*数据库连接池初始化*/
            dataSource = new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(password);
            dataSource.setJdbcUrl(url);
         try {
             dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
         } catch (PropertyVetoException e) {
             System.out.println("jdbc驱动加载异常");
             e.printStackTrace();
         }
            dataSource.setInitialPoolSize(50);
            dataSource.setAcquireIncrement(50);
            dataSource.setMinPoolSize(50);
            dataSource.setMaxPoolSize(1000);
            dataSource.setMaxStatements(50);
            dataSource.setMaxIdleTime(20);
            dataSource.setIdleConnectionTestPeriod(20);
            dataSource.setAcquireRetryAttempts(5);
         System.out.println("数据库连接池初始化");
        }
         public static synchronized Connection getConnection() throws SQLException {
             /*获取数库连接方法*/
             System.out.println("获取数据库连接");
             return dataSource.getConnection();

         }
}




jdbc工具类,简化curd操作



public class JdbcUtil implements Serializable {
    private PreparedStatement ps=null;
    private Connection connection=null;
    private ResultSet  resultSet=null;
    private PreparedStatement setPreparedStatement(PreparedStatement ps, String sql, Object ...objects) throws SQLException {
        ps = connection.prepareStatement(sql);
        for (int i=1;i<=objects.length;i++)
        {
            ps.setObject(i,objects[i-1]);
        }
        return ps;
    }
    /**
     * 将map转换为object
     * **/
    private Object setObjectValue(Object object, Field[] fields, Map map) throws NoSuchFieldException, IllegalAccessException {

        for (int i = 0; i < fields.length; i++) {
            Field field = object.getClass().getDeclaredField(fields[i].getName());
            field.set(object,null);
            if(map.get(fields[i].getName())!=null)
            {
                field.set(object, map.get(fields[i].getName()));
            }
        }
        return object;
    }
    /**
     * 提交,自动提交时请勿使用
     * **/
    public void Commit( ) throws SQLException {
        connection.commit();
    }
    /**
     * 获取连接
     * **/
    public void open() throws SQLException {
        connection= MyDatabaseLinkPool.getConnection();
    }
    /**
     * 插入数据  参数objects 为 ? 占位符的值
     * **/
    public void insert(String sql,Object ...objects) throws SQLException {
        ps=setPreparedStatement(ps,sql,objects);
        ps.executeUpdate();
    }
    /**
     * 删除数据  参数objects 为 ? 占位符的值
     * **/
    public void delete(String sql,Object ...objects) throws SQLException {
        ps =setPreparedStatement(ps,sql,objects);
        ps.executeUpdate();
    }
    /**
     * 修改数据  参数objects 为 ? 占位符的值
     * **/
   public int update(String sql,Object ...objects) throws SQLException {
        int rows=-1;
        ps =setPreparedStatement(ps,sql,objects);
        ps.executeUpdate();
        return rows;
    }
    /**
     * 查询数据 ,返回Map类型list 参数objects 为 ? 占位符的值
     *
     * @return**/
    public List<Map> query(String sql, Object ...objects) throws SQLException {

        List<Map> list=new ArrayList<Map>();
        ps =setPreparedStatement(ps,sql,objects);
        resultSet=  ps.executeQuery();
        ResultSetMetaData rsmeta = resultSet.getMetaData();
        int length = rsmeta.getColumnCount();
        while(resultSet.next()) {
            Map<String,Object> map = new HashMap<String,Object>();
            for(int i=0;i<length;i++) {
                map.put(rsmeta.getColumnLabel(i+1), resultSet.getObject(rsmeta.getColumnLabel(i+1)));
            }
            list.add(map);
        }
        return list;
    }
    /**
     * 查询数据  返回Object类型 List,参数objects 为 ? 占位符的值,queryObject 为返回list中的对象
     * **/
    public List<Object> queryObject(String sql,Object queryObject,Object ...objects) throws SQLException, NoSuchFieldException, IllegalAccessException, ClassNotFoundException, InstantiationException {

        List<Object> list=new ArrayList<Object>();
        Field[] fields= queryObject.getClass().getFields();
        ps =setPreparedStatement(ps,sql,objects);
        resultSet=  ps.executeQuery();
        ResultSetMetaData rsmeta = resultSet.getMetaData();
        String objectName=queryObject.getClass().getName();
        int length = rsmeta.getColumnCount();
        int i=0;
        HashMap<String,Object> map = new HashMap<String,Object>();
        while(resultSet.next()) {
            Object row=Class.forName(objectName).newInstance();
            for(i=0;i<length;i++) {
                map.put(rsmeta.getColumnLabel(i+1), resultSet.getObject(rsmeta.getColumnLabel(i+1)));
            }
            row=setObjectValue(row,fields,map);
            list.add(row);
        }
        return list;
    }
    /**关闭连接
     * **/

    public void close() throws SQLException {
        if(resultSet!=null)
            resultSet.close();
        if(ps!=null)
            ps.close();
        if (connection!=null)
            connection.close();
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值