你把你5行代码 for (int i = 0; i < poolSize; i++) { poolsize改为pool.size() 指针越界你看见没有你先定义个一个容器为pool = new Vector<Connection>(poolSize); 这个是为10的 然后在读取你的配置文件这个时候你定义了5 循环的时候5后面的连接数为空就不能关闭了 肯定报错了。 要么就先 pool = new Vector<Connection>(poolSize); readConfig(); // 读取配置文件 这2个地方换下位子先读取配置文件在定义容易数量大小。还有你的循环都没有加为空判断了。个人感觉不怎么好。
而且你每次这么调用 pool = ConnectionPool.getInstance(); 你的链接数都不会减少。
/** * 关闭连接池中的所有数据库连接 */ public synchronized void closePool() { for (int i = 0; i < poolSize; i++) { try { ((Connection)pool.get(i)).close(); } catch (SQLException e) { e.printStackTrace(); } pool.remove(i); } } 如果你想去掉pool里面所有的conn可以用pool.clear(); /** * 关闭连接池中的所有数据库连接 */ public synchronized void closePool() { for (int i = 0; i < poolSize; i++) { try { ((Connection)pool.get(i)).close(); } catch (SQLException e) { e.printStackTrace(); }
把poolSize改成20后,10就不越界了,看来是取得中间值?
for (int i = 0; i < poolSize; i++) {
try {
((Connection)pool.get(i)).close();
} catch (SQLException e) {
e.printStackTrace();
}
pool.remove(i);
}
}
你是获得一个连接,pool中remove掉,release掉,再添加到pool中,这个关系是对应的。但是你关闭了又把conn从vector中remove了。这个pool理论上是越来越少。把pool.remove(i);去掉试试
指针越界你看见没有你先定义个一个容器为pool = new Vector<Connection>(poolSize); 这个是为10的
然后在读取你的配置文件这个时候你定义了5 循环的时候5后面的连接数为空就不能关闭了 肯定报错了。
要么就先 pool = new Vector<Connection>(poolSize); readConfig(); // 读取配置文件 这2个地方换下位子先读取配置文件在定义容易数量大小。还有你的循环都没有加为空判断了。个人感觉不怎么好。
* 关闭连接池中的所有数据库连接
*/
public synchronized void closePool() {
for (int i = 0; i < poolSize; i++) {
try {
((Connection)pool.get(i)).close();
} catch (SQLException e) {
e.printStackTrace();
}
pool.remove(i);
}
}
如果你想去掉pool里面所有的conn可以用pool.clear();
/**
* 关闭连接池中的所有数据库连接
*/
public synchronized void closePool() {
for (int i = 0; i < poolSize; i++) {
try {
((Connection)pool.get(i)).close();
} catch (SQLException e) {
e.printStackTrace();
}
}
pool.clear();//从此向量中移除所有元素。
}
刚才的指针越界确实是楼上大哥说的那样remove之后容易大小减少获取了一个空值就错了。最好加上为空判断
for (int i = 0; i < poolSize; i++) {
if(pool.get(i) != null){
try {
((Connection)pool.get(i)).close();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("============="+pool.size());
// pool.remove(i);
}
}
System.out.println("============="+pool.size());
pool.clear(); //从此向量中移除所有元素。
System.out.println("============="+pool.size());
}
循环里面的==========10也是只打印了五次,说明不remove,pool里面的非空conn也只有5个,release方法是add(conn),在那里加输入pool.size输出了10次。我还是不明白连接池里面为什么只有5个连接
看我的第一个回复内容
首先你看下你的配置连接数的配置文件配置的是多少你定义的容器数量是10也就是pool.size();
而后来的poolSize是取你配置文件的数量也就是你解析后的长度了。
我觉得你代码哪有写没有问题 我不清楚你配置文件配置的是多少?