Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

06 DAO's e construtor

Bom dia. Eu não entendi bem se devo usar ou não o construtor sem argumentos, criando a conexao automativamente? É correto eu criar um método estático pra gerenciar as instancias como no fonte abaixo? Eu sempre uso assim. Gostaria de saber se é uma boa pratica.

public class ProdutoDAO {
    private static ProdutoDAO instance;
    private Connection connection;
    public static ProdutoDAO getInstance() throws Exception {
        if (instance == null) {
            instance = new ProdutoDAO();
        }
        return instance;
    }

    public ProdutoDAO() throws Exception {
        this.connection = new ConnectionFactory().getConnection();
    }

    public void salvar(Produto produto) throws SQLException {
        String sql = "INSERT INTO PRODUTO(NOME, DESCRICAO) VALUES(?, ?)";
        try (PreparedStatement prepareStatement = this.connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
            prepareStatement.setString(1, produto.getNome());
            prepareStatement.setString(2, produto.getDescricao());
            prepareStatement.execute();
            try (ResultSet resultSet = prepareStatement.getGeneratedKeys()) {
                while (resultSet.next()) {
                    produto.setId(resultSet.getInt(1));
                }
            }
        }
    }
}
2 respostas
solução!

Oi, Calixto. Bom dia. Esse padrão que você utiliza se chama Singleton, onde é criada uma única instância do objeto e compartilhada para todo o sistema. Você deve tomar cuidado apenas no cenário onde há muita concorrência no sistema. Se um usuário faz uma requisição para sua aplicação, ele irá usar a instância criada. Se o banco de dados demorar a responder ou a requisição não for uma requisição rápida, quando outro usuário fizer uma requisição para a aplicação, ele terá que esperar finalizar o processamento da requisição do usuário anterior. As vezes a espera pode causar uma exceção, causando um certo desconforto no usuário que quer fazer uma requisição para o seu sistema. O ideal seria você não ter apenas 1 conexão aberta para seus usuários, mas também não deixar abrir conexões de forma descontrolada, por isso recomenda-se o pool de conexões, que com poucas configurações te da um controle melhor de como trabalhar com as conexões do banco de dados.

Bom dia. Muito bem explicado. Obrigado mesmo pela otima explicação.