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

嗨,在我的项目中,我已经创建了两个表,分别是Role_header和Role_details表。 并且Role_details表是指Role_头表

在我的java类中,我有两个方法

insertRoleHeader…->将首先调用它并设置conn.setAutoCommitfalse。我没有提交此操作,因为在此之后,我想在role_details表中插入具有多条记录的role_详细信息。因此,如果抛出任何异常,我将首先调用此方法。我已将此设置为在catch中回滚。 insertRoleDetails…->forloop将调用此方法。我将提交此方法的每次调用。当时我得到的错误是java.sql.SQLException:超过了锁等待超时;尝试重新启动事务。 我的示例代码如下:

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在源代码中显示了两次,这表明使用了两个连接而不是一个连接。如果使用两个连接,一个连接可能永远不会提交,这可能会导致错误。