多次连接数据库查询后(大概15~20次左右)会出错:2010-08-20 14:54:28 ERROR [Thread-24] (DataBaseSelector.java:54) -
org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
        at com.hp.db.DataBaseSelector.getConnnect(DataBaseSelector.java:52)
        at com.hp.db.DataBaseSelector.getMessageList(DataBaseSelector.java:95)
        at com.hp.ui.NodeInternalFrame$3.actionPerformed(NodeInternalFrame.java:635)
        at com.hp.ui.ProgressBarDialog$ActionThread.run(ProgressBarDialog.java:73)
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
        at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1134)
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
        ... 5 more
连接池的代码如下:public Connection getConnnect() throws SystemException {
if (dataSource == null) {
initDataSource();
}
try {
con = dataSource.getConnection();
} catch (SQLException e) {
logger.error(null, e);
throw new SystemException(Const.Exception.DatabaseConnnectFailed.value, e);
}
return con;
}public static void initDataSource() {
dataSource = new BasicDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(userName);
dataSource.setPassword(password);
dataSource.setInitialSize(10);
dataSource.setMaxActive(20);
dataSource.setMinIdle(5);
dataSource.setMaxIdle(15);
dataSource.setMaxWait(3000);
}public ArrsyList<String> query(String sql){
       ...........
       preStatement = getConnnect().prepareStatement(sql);
       ...........
}