BaseDao中获取Connection的方法
public Connection getConn() {
try {
if(null == conn) {
conn = db.getConnection();
}
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
在平时的练习中一个Service中只调用一次dao操作,所以该方法的问题没有被发现;
这里的问题是CURD操作后的conn.close(), 只是做连接数据库资源的释放,内存对象还会存在也就是close后conn!=null,当第二次调用给方法是,会直接返回被释放连接的conn,到此第二次访问数据库是报SQLException Connection is closed异常
改正之后
//1.
public Connection getConn() {
try {
if(null == conn || conn.isClosed()) {
conn = db.getConnection();
}
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//2.
@Override
public void close() {
if(conn != null) {
try {
conn.close();
conn = null; //~~~~
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在释放连接close后网上提供说法是把conn=null;也可以避免以上的问题,以及重复关闭资源的问题