系统偶然爆出 Lock wait timeout exceeded; try restarting transaction 的错误,网上都是杀进程的方式;JDBC没有解决办法了都。
问题产生的原因是没有给JDBC的connect设置隔离;今天非常偶然在笔记中找到一句话:
如果是使用JDBC对数据库的事务设置隔离级别的话,也应该是在调用Connection对象的setAutoCommit(false)方法之前。
调用Connection对象的setTransactionIsolation(level)即可设置当前链接的隔离级别,至于参数level,可以使用Connection对象的字段:
后记:隔离级别的设置只对当前链接有效。对于使用MySQL命令窗口而言,一个窗口就相当于一个链接,当前窗口设置的隔离级别只对当前窗口中的事务有效;
对于JDBC操作数据库来说,一个Connection对象相当于一个链接,而对于Connection对象设置的隔离级别只对该Connection对象有效,与其他链接Connection对象无关。
问题解决代码:
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
如何mock,复现问题:
在navicat客户端中ÿ