Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Doceria com commit e rollback

Implementei o que foi visto na aula na Doceria.

package doceria;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class InsercaoParametro {

    public static void main(String[] args) throws SQLException {
        CriaConexao criaConexao = new CriaConexao();
        Connection conexao = criaConexao.conecta();
        conexao.setAutoCommit(false); //controlar as transações

        try {
            //Gerencia os dados inseridos
            PreparedStatement stm = conexao.prepareStatement("INSERT INTO doce (nome, ingredientes) VALUES (?, ?)", Statement.RETURN_GENERATED_KEYS);
            adicionarDoce("Pudim de leite", "Gelatina, água, leite condesado, creme de leite, baunilha e leite", stm);
            adicionarDoce("Danoninho", "Leite condesado, creme de leite e morango", stm);

            //Evitar possives erros na transação antes que aconteça
            conexao.commit();

            stm.close();
            conexao.close();

        } catch (Exception erro) {
            erro.printStackTrace();
            System.out.println("Execução do ROLLBACK");
            conexao.rollback();
        }
    }

    public static void adicionarDoce(String nome, String ingredientes, PreparedStatement stm) throws SQLException {
        //Settar os atributos (? ?)
        stm.setString(1, nome);
        stm.setString(2, ingredientes);

        if (nome.equals("Danoninho")) {
            throw new RuntimeException("Não foi possivel adicionar o doce!!!");
        }

        stm.execute();

        ResultSet rst = stm.getGeneratedKeys();

        while (rst.next()) {
            Integer id = rst.getInt(1);
            System.out.println("O ID criado foi: " + id);
        }
        rst.close();
    }
}

Compilação Insira aqui a descrição dessa imagem para ajudar na acessibilidade Eu já tinha visto commit e rollback na faculdade, mas nessa videoaula e pode compreender melhor. Obrigado.

De certa forma, o commit antecede um problema na execução do código e o rollback avisa ao commit qual é o problema e desfaz a transação. Seria isso?

1 resposta
solução!

Lucas, boa tarde. O commit e rollback funcionam para transações e uma transação é um conjunto de operações. Por exemplo, se eu quiser fazer um insert e um update juntos, ele tem que estar "envolvido" em uma transação e isso implica que o insert e o update devem ser executados com sucesso. Se o insert e o update for bem sucedido, a transação é commitada e é refletido no banco. Se qualquer uma delas da errado, a transação é desfeita pelo rollback. Ou seja, ou todas as operações são bem sucedidas para commitar a transação ou será realizado o rollback.