java.sql.SQLException:超过锁等待超时;尝试重新启动事务
嗨,在我的项目中,我已经创建了两个表,分别是Role_header和Role_details表。 并且Role_details表是指Role_头表 在我的java类中,我有两个方法 insertRoleHeader…->将首先调用它并设置conn.setAutoCommitfalse。我没有提交此操作,因为在此之后,我想在role_details表中插入具有多条记录的role_详细信息。因此,如果抛出任何异常,我将首先调用此方法。我已将此设置为在catch中回滚。 insertRoleDetails…->forloop将调用此方法。我将提交此方法的每次调用。当时我得到的错误是java.sql.SQLException:超过了锁等待超时;尝试重新启动事务。 我的示例代码如下:java.sql.SQLException:超过锁等待超时;尝试重新启动事务,java,mysql,jdbc,Java,Mysql,Jdbc,嗨,在我的项目中,我已经创建了两个表,分别是Role_header和Role_details表。 并且Role_details表是指Role_头表 在我的java类中,我有两个方法 insertRoleHeader…->将首先调用它并设置conn.setAutoCommitfalse。我没有提交此操作,因为在此之后,我想在role_details表中插入具有多条记录的role_详细信息。因此,如果抛出任何异常,我将首先调用此方法。我已将此设置为在catch中回滚。 insertRoleDetai
public void insertHeader(RoleMasterSupport rMS) throws SQLException {
connectDB();
Statement stmt = null;
try {
roleMasterConn.setAutoCommit(false);
stmt = roleMasterConn.createStatement();
String sql = "insert into role_header( create_user, " +
"create_date, " +
"run_user, " +
"run_date, " +
"role_id, " +
"role_name, "+
"remarks) " +
"values('"+Constants.sUserName+"', now(), "
+ "'"+Constants.sUserName+"', now(), "
+ "'"+rMS.getsRoleID()+"', '"+rMS.getsRoleName()+"', "
+ "'"+rMS.getsRemarks()+"') ";
stmt.executeUpdate(sql);
stmt.close();
} catch (SQLException e) {
roleMasterConn.rollback();
throw e;
}
}
public void insertDetails(RoleMasterSupport rMS, TableModel model) throws SQLException
{
for (int i = 0; i < model.getRowCount(); i++) {
dbop.insertDetail(rMS, rMS.getaLScreenNames().get(i),
rMS.getaLAdd().get(i), rMS.getaLView().get(i),
rMS.getaLModify().get(i), rMS.getaLDelete().get(i));
}
}
public void insertDetail(RoleMasterSupport rMS, String sScreenName, String sAdd, String sView, String sModify, String sDelete) throws SQLException
{
connectDB();
Statement stmt = null;
try {
roleMasterConn.setAutoCommit(false);
stmt = roleMasterConn.createStatement();
String sql = "insert into role_details( create_user, " +
"create_date, " +
"run_user, " +
"run_date, " +
"role_id, " +
"screen_name, " +
"modify_screen, " +
"add_screen, " +
"delete_screen, " +
"view_screen) " +
"values('"+Constants.sUserName+"', now(), "
+ "'"+Constants.sUserName+"', now(), "
+ "'"+rMS.getsRoleID()+"', '"+sScreenName+"', "
+ "'"+sModify+"', '"+sAdd+"', "
+ "'"+sDelete+"', '"+sView+"') ";
stmt.executeUpdate(sql);
roleMasterConn.commit();
} catch (SQLException e) {
roleMasterConn.rollback();
throw e;
}
}
请澄清这个问题。这有什么问题,你知道会发生什么,等等。我得到了这个错误java.sql.SQLException:lock wait timeout extered;尝试重新启动事务。plz允许我解决它。connectDB在源代码中显示了两次,这表明使用了两个连接而不是一个连接。如果使用两个连接,一个连接可能永远不会提交,这可能会导致错误。