java.sql.SQLException:超出锁定等待时间;尝试重新启动事务

时间:2014-05-07 19:04:28

标签: java mysql jdbc

您好,在我的项目中,我创建了两个表,即Role_header和Role_details表。 而Role_details表也指的是Role_header表。

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

  1. insertRoleHeader(...) - >将首先调用并设置conn.setAutoCommit(false).i没有提交此项,因为在此之后我想在Role_details表中插入具有多个记录的role_details。所以如果抛出任何异常,我将首先调用此方法。我把它设置为在catch中回滚。
  2. insertRoleDetails(.....) - >这个方法将由forloop调用。每次调用这个方法我都会提交。那时我的错误为java.sql.SQLException: lock wait time out exceeded; try restarting transaction
  3. 我的示例代码在这里:

    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;
        }
    }   
    

0 个答案:

没有答案