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é?