获取及关闭连接的类是这样写的:
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
public static Connection getConnection() {
Connection con=null;
try{
con=DriverManager.getConnection( "proxool.oracle ");
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public static void releaseResultSet(ResultSet rs) {
// TODO 自动生成方法存根
try{
if(rs!=null){
rs.close();
}
}catch( Exception e){
e.printStackTrace();
}
}
public static void releaseStatement(PreparedStatement ps) {
// TODO 自动生成方法存根
try{
if(ps!=null){
ps.close();
}
}catch( Exception e){
e.printStackTrace();
}
}
public static void releaseConnection(Connection con) {
// TODO 自动生成方法存根
try{
if(con!=null){
//con.close();
}
}catch( Exception e){
e.printStackTrace();
}
}
public static void releaseStatement(Statement ps) {
// TODO 自动生成方法存根
try{
if(ps!=null){
ps.close();
}
}catch( Exception e){
e.printStackTrace();
}
}
}
我使用
getConnection()创建连接没有问题,但是在关闭连接的时候
使用releaseConnection(),如果在releaseConnection()执行con.close(),即
显式关闭连接的话,下一次获取连接的时候报“使用的连接已经关闭的错误”。
如果不执行con.close(),则下次调用会创建新的连接多次之后就会达到上限,报“已经达到了连接最大数量”的错误。
请问这个问题应该如何解决?最好能提供使用的代码,谢谢!!
------解决方案--------------------
lz的同一个Connection对象是否被多次使用了。
------解决方案--------------------
一般连接池中的releaseConnection()方法是将从ConnectionPool中获得的Connection对象放回到ConnectionPool中,而不是物理性的关闭Connection对象。
参考一下:http://community.csdn.net/Expert/topic/5538/5538855.xml?temp=.8157007中的: