异常场景:
在使用JDBC获取数据库连接时,没有按照代码规范及时关闭数据库连接,而是在获取到连接后,进行大量数据库操作(例如,循环查询、修改、新增等)。
代码示例
public void update(String[] queries){
Connection conn = null;
Statement stmt = null;
try {
conn = getConnection();
for(int i = 0; i < queries.length; i++) {
stmt = conn.createStatement();
int count = stmt.executeUpdate(queries[i]);
// do work
}
} catch (Exception e) {
// handle any exceptions
} finally {
try {
if(stmt != null)
stmt.close();
} catch (SQLException sse) {}
try {
if(conn != null)
conn.close();
} catch (SQLException cse) {}
}
}
解决方案:
避免采用任何放弃 JDBC 对象的代码惯例,尽量做到Connection、Statement 和 ResultSet操作数据库时,尽量保证数据库操作次数在已知可控范围,若次数不可控,则需要及时关闭。
代码示例
public void update(String[] queries){
Connection conn = null;
Statement stmt = null;
for(int i = 0; i < queries.length; i++) {
try {
conn = getConnection();
stmt = conn.createStatement();
int count = stmt.executeUpdate(queries[i]);
// do work
} catch (Exception e) {
// handle any exceptions
} finally {
try {
if(stmt != null)
stmt.close();
} catch (SQLException sse) {}
try {
if(conn != null)
conn.close();
} catch (SQLException cse) {}
}
}
}