发现问题
在进行JDBC批量操作时,connection = dataSource.getConnection();connection.setAutoCommit(false);
,期间在for循环进行预编译更新语句时,发现操作的表锁表(查询页面一直加载中),更新操作执行完毕才解锁。鉴于更新频率很低,那就下班期间调用执行更新。不曾想,在某个for循环中报错,一直锁表。
分析问题
在开启 connection.setAutoCommit(false)
后,connection.commit()
前锁表,虽然在执行con.close()的时候会释放锁,但若应用服务器使用了数据库连接池,连接不会被断开,从而不会放锁
解决问题
在catch代码块中进行rollback操作
if (connection != null) {
try {
connection.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}