IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 数据库连接池工具类 -> 正文阅读

[大数据]数据库连接池工具类

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

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


/**
 * 对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 {
    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 = 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中的对象
     * 例 jdbcUtil.queryObject(sql,new MyProduct()/*返回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();
        int length = rsmeta.getColumnCount();
        int i=0;
        HashMap<String,Object> map = new HashMap<String,Object>();
        while(resultSet.next()) {
            Object row=Class.forName(queryObject.getClass().getName()).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(ps!=null)
            ps.close();
        if (connection!=null)
            connection.close();
    }
}





  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-09 11:45:16  更:2021-12-09 11:46:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:08:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码