zoukankan      html  css  js  c++  java
  • 数据库连接池

    连接池

      - 就是将Connection对象放入list中,反复重用。

      - 连接池的初始化:

        - 事先放入多个对象。

      - 从连接池中取连接对象

        - 如果池中有可用连接,则将池中最后一个返回,同时,将该连接从池中remove,表示正在使用。

        - 如果池中没有可用连接,则创建一个新的。

      - 关闭连接

        - 并不是真正的关闭连接,而是将用完的连接放入池中。

    市场上常用的连接池产品

      - DBCP

      - c3p0

      - proxool

    package com.yf.sorm.pool;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.yf.sorm.core.DBManager;
    
    /**
     * 连接池的类
     * @author yangf
     *
     */
    public class DBConnectionPool {
        
        /**
         * 连接池对象
         */
        private static List<Connection> pool;
        
        /**
         * 最大连接数
         */
        private static final int POOL_MAX_SIZE = DBManager.getConf().getPoolMaxSize();
        
        /**
         * 最小连接数
         */
        private static final int POOL_MIN_SIZE = DBManager.getConf().getPoolMinSize();
        
        /**
         * 初始化连接池,使池中的连接数达到最小值
         */
        public void initPool() {
            
            if(pool == null) {
                pool = new ArrayList<Connection>();
            }
            
            while(pool.size() < DBConnectionPool.POOL_MIN_SIZE) {
                pool.add(DBManager.createConnection());
            }
        }
        
        /**
         * 从连接池中取出一个连接
         * @return 取出的连接
         */
        public synchronized Connection getConnection() {
            // 获取最后一个连接的索引
            int last_index = pool.size() - 1;
            Connection connection = pool.get(last_index);
            pool.remove(last_index);
            return connection;
        }
        
        /**
         * 将连接放回池中
         * @param conn 连接
         */
        public synchronized void close(Connection conn) {
            if(pool.size() >= DBConnectionPool.POOL_MAX_SIZE) {
                try {
                    if(conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            } else {
                pool.add(conn);
            }
        }
        
        public DBConnectionPool() {
            initPool();
        }
    }
  • 相关阅读:
    使用批处理文件(.bat)启动Java程序
    VARCHAR2(%n)和VARCHAR2(%n char)区别
    Truncate Table
    Ext4之杂七杂八
    Oracle导表
    关于hibernate的session.createSQLQuery(sql)直接调用底层SQL后,返回结果集的问题
    Ext4真是难(展开表格行,显示图表)
    Hadoop学习笔记【入门】
    魅蓝note 做Android真机调试
    11-java学习笔记-反射
  • 原文地址:https://www.cnblogs.com/yangfanasp/p/6896160.html
Copyright © 2011-2022 走看看