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

É muito recomendado o uso de try-with-resources?

Eu implementei o método do try resource, mas acho que o código ficou menos legível.

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();
        try (Connection conexao = criaConexao.conecta()) {
            conexao.setAutoCommit(false); // controlar as transações

            try (PreparedStatement stm = conexao.prepareStatement("INSERT INTO doce (nome, ingredientes) VALUES (?, ?)",
                    Statement.RETURN_GENERATED_KEYS)) {
                // Gerencia os dados inseridos

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

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

        try (ResultSet rst = stm.getGeneratedKeys()) {

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

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

public class Remocao {

    public static void main(String[] args) throws SQLException {
        CriaConexao criaConexao = new CriaConexao();
        try (Connection conexao = criaConexao.conecta()) {

            // Gerencia os dados recebidos pela conexão
            try (PreparedStatement stm = conexao.prepareStatement("DELETE FROM DOCE WHERE ID > ?")) {

                // Setta o atributo ? no statement
                stm.setInt(1, 2);

                stm.execute();

                Integer linhasModificadas = stm.getUpdateCount();
                System.out.println("Quantidades de linhas que foram modificadas: " + linhasModificadas);
            }
        }
    }
}
package doceria;

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

public class Listagem {

    public static void main(String[] args) throws SQLException {
        // Estabelecer a conexão com o banco
        CriaConexao criaConexao = new CriaConexao();
        try (Connection conexao = criaConexao.conecta()) {

            // Utilizar comandos do Banco de dados, gerenciando-os
            try (PreparedStatement stm = conexao.prepareStatement("SELECT ID, NOME, INGREDIENTES FROM DOCE")) {

                // Operação lógica para saber se esta funcionando
                boolean resultado = stm.execute();

                System.out.println(resultado);

                // Pegar o resultado da lista
                try (ResultSet itensLista = stm.getResultSet()) {

                    System.out.println("Cardápio");
                    System.out.println();
                    while (itensLista.next()) {
                        Integer id = itensLista.getInt("ID");
                        String nome = itensLista.getString("NOME");
                        String ingredientes = itensLista.getString("INGREDIENTES");
                        System.out.println("Código: " + id);
                        System.out.println("Nome: " + nome);
                        System.out.println("Ingredientes: " + ingredientes);
                        System.out.println();
                    }
                }
            }
        }
    }
}

O código fico menos legível? Ou é impressão minha? Mas pelo o que o professor comentou, usar o try resources é uma boa prática do mercado né?

1 resposta
solução!

Lucas, boa tarde. O try-with-resources é bom pois você não precisará explicitar a chamada do método close dos statements (é fácil esquecer e isso implica em complicações para o banco). Logo, se vc achou menos legível, vc pode voltar para como estava antes, mas sempre lembre de fechar todos os statements.