java - 回滚在 Java 中不起作用

标签 java mysql jdbc transactions

我有一个执行简单 mysql 插入的方法,当我尝试如下所示回滚插入操作时,出现错误但它没有回滚错误,请帮助我,

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

    }

一旦使用所需参数调用此方法,因为第二个插入语句中存在错误,我希望回滚第一个插入操作。但认为显示错误,第一个插入语句将记录添加到数据库。

最佳答案

只是为了检查 - 您使用的表格类型是什么?上次我使用 MySQL 时,MyISAM 表不支持事务,这意味着您必须使用其他表类型,例如InnoDB.

关于java - 回滚在 Java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10026156/

相关文章:

java - 具有不同 sql 查询的批处理 preparedstatement

java - SQL 注入(inject)漏洞通过 preparedStatement

java - 如何设置SQL Server连接池大小

php - 创建 MySQL 函数时出现问题

mysql - 如何组合 2 个 SQL 查询并检索累计计数?

具有不同计数的 mySQL 多连接

java - 如何将 sqljdbc_auth.dll 添加到我的 Maven 项目

java - 如何执行一个任务并每分钟返回一个数据

java - 如何使用java查找网页中的超链接?

java - 如何在java类中处理和显示DataDecodeException日志