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

como fazer commit e rollback no MVC

Eu poderia mover o statement para dentro do método adiciona? Sei que tem muitas coisas explicativas didáticas, porém para um projeto grande (MVC) em pleno funcionamento, o statement deve ficar onde? não é dentro da pasta DAO? E se for dentro do DAO como eu vou fazer o tal do commit e rollback? minha cabeça entrou em colapso kkkk

public class TestaInsercao {

    public static void main(String[] args) throws SQLException {
        try (Connection connection = Database.getConnection()) {
            connection.setAutoCommit(false);
            String sql = "insert into produto (nome, descricao) values (?, ?)";
            try (PreparedStatement statement = connection.prepareStatement(sql,
                    Statement.RETURN_GENERATED_KEYS)) {
                adiciona("TV LCD", "32 polegadas", statement);
                adiciona("Blueray", "Full HDMI", statement);

                connection.commit();
                statement.close();
            } catch (Exception e) {
                connection.rollback();
                System.out.println("Rollback efetuado");
                e.printStackTrace();
            }
        }
    }

    private static void adiciona(String nome, String descricao,
            PreparedStatement statement) throws SQLException {
        if (nome.equals("Blueray")) {
            throw new IllegalArgumentException("Problema ocorrido");
        }
        statement.setString(1, nome);
        statement.setString(2, descricao);
        boolean resultado = statement.execute();
        System.out.println(resultado);
        try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
            while (generatedKeys.next()) {
                long id = generatedKeys.getLong("id");
                System.out.println("id gerado: " + id);
            }
        }
    }
}
1 resposta
solução!

Em geral dentro do seu dao vai ficar o statement sim :). Uma coisa que vai mudando é que você percebe que não é o dao que deve criar a connection e sim alguém de fora. Aí essa connection pode ser passada para quantos daos forem necessários.

Dessa forma você pode colocar vários daos na mesma transação e por aí vai :).