Rollback multiplas tabelas (RESOLVIDO)

Boa tarde galera, estou com um problema na hora de efetuar o rollback nas tabelas do banco.

Preciso salvar em duas tabelas, porem após a inserção no banco ele me gera um erro de MYSQLException e realiza o rollback na primeira tabela, mas na segunda tabela não

public boolean inserirProduto(ProdutoLojaExpressDTO[] produto) throws SQLException, ClassNotFoundException {
    int codigoProduto = 0;
    Date data = new Date();

    String insertProduto = "INSERT INTO store_produtos(codigo, titulo, custo, "
            + "preco, peso, autor, medidas, alterado, secao, categoria, marca) VALUES(?,?,?,?,?,?,?,?,?,?,?) ";

    String insertItem = "INSERT INTO store_itens(produto, item, estoque, ordem, "
            + "status, deletado, autor, alterado) VALUES(?,?,?,?,?,?,?,?)";

    try (Connection conn = ConexaoNuvem.abrir()) {
        conn.setAutoCommit(false);
        //INSERT STORE_PRODUTOS --------------------------------------------
        try {
            for (ProdutoLojaExpressDTO produtoExpress : produto) {
                PreparedStatement pstmt = conn.prepareStatement(insertProduto, RETURN_GENERATED_KEYS);
                if (produtoExpress != null) {
                    pstmt.setString(1, produtoExpress.getCodigo());
                    pstmt.setString(2, produtoExpress.getTitulo());
                    pstmt.setDouble(3, produtoExpress.getCusto());
                    pstmt.setDouble(4, produtoExpress.getPreco());
                    pstmt.setDouble(5, produtoExpress.getPeso());
                    pstmt.setString(6, produtoExpress.getAutor());
                    pstmt.setString(7, produtoExpress.getMedidas());
                    pstmt.setTimestamp(8, new java.sql.Timestamp(data.getTime()));
                    pstmt.setInt(9, produtoExpress.getSecao());
                    pstmt.setInt(10, produtoExpress.getCategoria());
                    pstmt.setInt(11, produtoExpress.getMarca());
                    pstmt.executeUpdate();

                    try (ResultSet rs = pstmt.getGeneratedKeys()) {
                        if (rs.next()) {
                            codigoProduto = rs.getInt(1);
                        }
                    }
                }

                //INSERT STORE_ITENS -------------------------------------------
                int i = 1;
                PreparedStatement pstmtInsert = conn.prepareStatement(insertItem);
                for (ItemLojaExpressDTO item : produtoExpress.getItem()) {
                    if (item != null) {
                        pstmtInsert.setInt(1, codigoProduto);
                        pstmtInsert.setString(2, item.getItem());
                        pstmtInsert.setInt(3, item.getEstoque());
                        pstmtInsert.setInt(4, i);
                        pstmtInsert.setString(5, item.getStatus());
                        pstmtInsert.setBoolean(6, item.isDeletado());
                        pstmtInsert.setString(7, item.getAutor());
                        pstmtInsert.setTimestamp(8, new java.sql.Timestamp(data.getTime()));
                        pstmtInsert.executeUpdate();
                        i++;
                    }
                }

            }
        } catch (SQLException ex) {
            conn.rollback();
        }
        conn.commit();
        return true;
    }
}

Alguém poderia me ajudar!?

Boa jovem.
Posso estar errado, mas achei um pouco estranho aquele commit() fora do trycatch. Talvez se deixar ele no final, dentro do try, pode resolver o problema, pois se dá um erro ele faz rollback e mesmo assim realiza o commit.

Boa tarde mano.
Então, verifiquei aqui mas o commit está dentro do try que abre a conexão então de qualquer forma ele vai cair no catch do PreparedStatement e vai dar o rollback, verifiquei que so estava faltando a instrução de retorno, mas mesmo assim não funcionou.

O erro era o tipo da minha tabela, as tabelas do MYSQL com os tipos YISAM , MYISAM não aceitam rollback e nem commit e por acaso a minha tabela estava no tipo YISAM, alterei o tipo para InnoDB e funcionou certinho.

Comando para alteração: ALTER TABLE nomeTabela TYPE = InnoDB

1 curtida