zoukankan      html  css  js  c++  java
  • 自定义DB连接池实现

    实现一个简单的数据库连接池

    1,连接池接口

    package dbsource;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    /**
     * 连接池接口
     * @author lxz
     *
     */
    public interface DBSource {
    
        Connection getConnection() throws SQLException;
        
        void closeConnection(Connection con) throws SQLException;
    }

    2,连接池实现

    package dbsource;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    
    public class BasicDBSource implements DBSource {
    
        private final static String URL = "url";
        private final static String PASSWORD = "password";
        private final static String USER = "user";
        private final static String POOLMAX = "poolmax";
        private final static String DRIVER = "driver";
        private final static String INIT = "init";
        private final static String DEFAULT_PRO = "myjdbc.properties";
    
        private Properties pro = new Properties();// 属性文件对象
        private String url;// 地址
        private String user;// 数据库用户名
        private String password;// 数据库密码
        private int max;// 最大连接数
        private int init;//初始化连接池
        private List<Connection> connections;// 数据连接集合
        
    
        public BasicDBSource(String configFile) throws IOException,
                ClassNotFoundException {
            pro.load(new FileInputStream(configFile));
            url = pro.getProperty(URL);
            user = pro.getProperty(USER);
            password = pro.getProperty(PASSWORD);
            max = Integer.parseInt(pro.getProperty(POOLMAX));
            init = Integer.parseInt(pro.getProperty(INIT));
            Class.forName(pro.getProperty(DRIVER));
            connections = new ArrayList<Connection>();
            for(int i=0;i<init;i++){
                try {
                    connections.add(DriverManager.getConnection(url,user,password));
                } catch (SQLException e) {
                    //数据库连接失败
                }
            }
        }
    
        public BasicDBSource() throws ClassNotFoundException, IOException{
            this(DEFAULT_PRO);
        }
        
        public Connection getConnection() throws SQLException {
            if(connections.size()==0){
                return DriverManager.getConnection(url,user,password);
            }else{
                int last = connections.size()-1;
                return connections.remove(last);
            }
        }
    
        public void closeConnection(Connection con) throws SQLException {
            if(connections.size()>=max){
                con.close();
            }else{
                connections.add(con);
            }
        }
    
    }

    3,配置文件

    url=数据库地址
    password=密码
    user=用户名
    poolmax=最大连接数
    driver=数据库驱动
    init=初始化连接数

    4,测试

    package source;
    
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import dbsource.BasicDBSource;
    import dbsource.DBSource;
    
    public class MainTest {
        
        public static void main(String[] args) {
            try {
                DBSource dbsource = new BasicDBSource("myjdbc.properties");
                Connection con1 = dbsource.getConnection();
                System.out.println("第一次获取的数据库连接对象地址:"+con1);
                dbsource.closeConnection(con1);
                Connection con2 = dbsource.getConnection();
                System.out.println("第二次获取的数据库连接对象地址:"+con2);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
    }
  • 相关阅读:
    timeout in asp.net
    ASP.NET_SessionId vs .ASPXAUTH why do we need both of them?
    Visual paradigm软件介绍
    OJ网站程序员必备
    c++异常详解
    C++STL之双端队列容器
    GPU的线程模型和内存模型
    C++ 中memset 勿要对类使用
    trait与policy模板技术
    C++标准库
  • 原文地址:https://www.cnblogs.com/qinggege/p/5091628.html
Copyright © 2011-2022 走看看