2012-04-05 1 views
0

У меня есть метод, который делает простой MySQL вставки, когда я попытался откатить действие вставки, как следует, на ошибку, но это не rollingback об ошибках, пожалуйста, помочь мне,Откат не работает в Java

public void addFamer(FamerDTO famer) throws Exception { 
     Connection con = JDBCConnectionPool.getInstance().checkOut(); 
     con.setAutoCommit(false); 

     try { 


      String generalFamerDataSQL = "INSERT INTO famers(famer_code, name_wt_initials, full_name, gender, " 
        + "nic_or_passport_no, sc_possition, phone_home, phone_mobile, phone_office) VALUES(?,?,?,?,?,?,?,?,?)"; 
      PreparedStatement insertFamerPS = con.prepareStatement(generalFamerDataSQL, PreparedStatement.RETURN_GENERATED_KEYS); 
      insertFamerPS.setString(1, famer.getFamerCode()); 
      insertFamerPS.setString(2, famer.getNameWithInitials()); 
      insertFamerPS.setString(3, famer.getNameInFull()); 
      insertFamerPS.setString(4, famer.getGender()); 
      insertFamerPS.setString(5, famer.getNICorPassportNo()); 
      insertFamerPS.setString(6, famer.getSocietyPosission()); 
      insertFamerPS.setString(7, famer.getHomePhone()); 
      insertFamerPS.setString(8, famer.getMobilePhone()); 
      insertFamerPS.setString(9, famer.getOfficePhone()); 
      insertFamerPS.execute(); 


String famerRelations = "INSERT INTO org_reg_blk_soc_fmr(org_id, region_id, famer_id, block_id, soc_id) " 
        + "VALUES (?,?,?,?,?)"; 
      PreparedStatement famerRelationsPS = con.prepareStatement(famerRelations); 
      famerRelationsPS.setInt(1, famer.getOrganization().getOrg_id()); 
      famerRelationsPS.setInt(2, famer.getRegion().getRegion_id()); 
      famerRelationsPS.setInt(3, famerID); 
      famerRelationsPS.setInt(4, famer.getBlock().getBlockId()); 
      famerRelationsPS.setInt(6, famer.getSociety().getSoc_id()); //intentionally made an error here to test, put index as 6 for 5 
      famerRelationsPS.execute(); 


      con.commit(); 
     } catch (Exception e) { 
      if (con != null) { 
       logger.info("Rolling back!"); 
       con.rollback();      
      } 
      logger.error(e.getLocalizedMessage()); 

     } finally { 
      con.setAutoCommit(true); 
      JDBCConnectionPool.getInstance().checkIn(con); 
     } 

    } 

после того, как этот метод вызывается с требуемыми параметрами, так как во втором вставке я предполагаю, что произойдет откат первого действия вставки. но думал, что ошибка показана, запись добавляется в базу данных с помощью первого оператора insert.

+0

Вы пытались явно начать новую транзакцию перед вставкой? –

ответ

7

Просто, чтобы проверить - какой тип таблицы вы используете? В прошлый раз, когда я использовал MySQL, таблицы MyISAM не поддерживали транзакции, то есть вы должны использовать другой тип таблицы, например. InnoDB.

+0

(удалено -1), так как это было бы первым делом спросить/посмотреть. –

+0

Thanx много Rory, мои таблицы mysql были MyISAM, поэтому я сменил их на innodb, а затем он работает. – Harsha

+0

@ Харша Вы должны подумать о принятии этого ответа, если он решит вашу проблему :) – Jim