Note

春蚕到死丝方尽,人至期颐亦不休,一息尚存须努力,留作青年为范畴。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

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();
        }
    }
    
}

 

posted on 2015-12-31 14:27  'Note'  阅读(212)  评论(0编辑  收藏  举报