去数据库获取数据的时候都要建立一个Connection去获取数据,建立Connection是比较 耗时的操作,而且当你用完的时候又要关闭,使用的时候又再去建立,整个过程走下来耗费的时间就会相对较多了,那么连接池就能很好节省建立Connection消耗的时间。
下面讲述是建立连接池的以及使用的步骤
-
建立一个List集合,List集合放的就是我们的Connection(我们可以在项目初始化的时建立多个Connection存入List集合中)
-
获取Connection:直接在List集合获取Connection,这时候就不用在花时间去建立Connection了,直接在List集合中拿来用,需要注意的是拿从List集合拿出后,需要在List集合中移除掉,避免多线程造成的安全隐患。
-
关闭Connection:其实是假关闭,为什么这样说呢!我给大家解释以下所谓的假关闭:条件:我只想这个List集合的大小是小于50的。如果现在List集合的大小是小于50的我就把Connection对象添加到集合里面,不关闭。如果大于50就真的关闭。
/**
-
* 连接池
-
*/
-
private static List<Connection> listCon=new ArrayList<Connection>();
-
/**
-
*
-
* @return Connection 获取Connection连接
-
*/
-
public static Connection getConnection() {
-
int i=listCon.size()-1;
-
Connection con=listCon.get(i);
-
listCon.remove(i);
-
return con;
-
}
-
/**
-
* 关闭ResultSet对象、 Statement对象
-
* Connection对象如果连接池没满就放进连接池,超过则关闭
-
* @param rs ResultSet对象
-
* @param ps Statement对象
-
* @param con Connection对象
-
*/
-
public static void getClose(ResultSet rs, PreparedStatement ps,
-
Connection con) {
-
try {
-
if (rs != null) {
-
rs.close();
-
}
-
if (ps != null) {
-
ps.close();
-
}
-
if(listCon.size()>conf.getPoolMaxSize()){
-
con.close();
-
}else{
-
if (con != null) {
-
listCon.add(con);
-
}
-
}
-
} catch (SQLException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
总结:做了个测试,没建立连接池后使用查询的时间是建立连接池后使用查询的时间的大概是3倍以上。(例: 查询学生表100边
从连接池获取Connection 所花费时间是:670毫秒
直接新建Connection 所花费时间是:2673毫秒)