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;也可以避免以上的問題,以及重複關閉資源的問題