Onde nesse caso com o DAO, ficaria o Commit e o Rollback por padrão, no DAO, ou na implementação?
Onde nesse caso com o DAO, ficaria o Commit e o Rollback por padrão, no DAO, ou na implementação?
Fiz no meu projeto pessoal desse jeito com o qual estou me baseando no curso. Está certo?
package br.com.financas.pessoal.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import br.com.financas.pessoal.model.Ativo;
import br.com.fincancas.pessoal.ConnectionFactory;
public class AtivoDAO {
private Connection connection;
public AtivoDAO() throws SQLException {
this.connection = new ConnectionFactory().recuperaConexao();
this.connection.setAutoCommit(false);
}
public void commit() throws SQLException {
try {
this.connection.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
public void rollback() throws SQLException {
try {
this.connection.rollback();
} catch (Exception e) {
e.printStackTrace();
}
}
public void close() {
try {
this.connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void adiciona(Ativo ativo) throws SQLException {
String sql = "INSERT INTO ativos (nome,tipo_ativo,descricao) VALUES(? ,? ,?)";
try (PreparedStatement pstm = connection.prepareStatement(sql)) {
pstm.setString(1, ativo.getNome());
pstm.setString(2, ativo.getTipoAtivo());
pstm.setString(3, ativo.getDescricao());
pstm.execute();
}
}
public List<Ativo> lista() throws SQLException{
List<Ativo> ativos = new ArrayList<Ativo>();
String sql = "SELECT nome FROM ativos";
try (PreparedStatement stm = connection.prepareStatement(sql)) {
stm.execute();
try (ResultSet rst = stm.getResultSet()) {
while (rst.next()) {
Ativo ativo = new Ativo(rst.getString(1));
ativos.add(ativo);
}
}
}
return ativos;
}
}
package br.com.financas.pessoal.teste;
import java.sql.SQLException;
import java.util.List;
import br.com.financas.pessoal.dao.AtivoDAO;
import br.com.financas.pessoal.model.Ativo;
public class TestaInsercaoComAtivo {
public static void main(String[] args) throws SQLException {
Ativo ativo = new Ativo("BBDC4", "Negócios", "Bradesco");
AtivoDAO ativoDAO = new AtivoDAO();
try {
ativoDAO.adiciona(ativo);
List<Ativo> listaDeAtivos = ativoDAO.lista();
ativoDAO.commit();
listaDeAtivos.stream().forEach(lda -> System.out.println(lda));
} catch (Exception e) {
e.printStackTrace();
ativoDAO.rollback();
} finally {
ativoDAO.close();
}
}
}
Gustavo, bota tarde. Seria mais interessante estar na DAO, caso contrário, você joga uma responsabilidade para classe de teste que não é dela, sabe? Como a DAO é justamente para essas interações com o banco de dados, faz mais sentido estar lá. =)