Olá pessoal, eu estava fazendo alguns exercícios da apostila Fj21 da Caelum e meu veio uma dúvida a respeito do seguinte código:
public class TestaConexao {
public static void main(String [] argvs) throws SQLException {
Connection con = new ConnectionFactory().getConnection();
System.out.println("Conexão Aberta");
con.close();
}
}
Mais especificamente no trecho:
Connection con = new ConnectionFactory().getConnection();
Por que quando eu tento colocar a chamada do método getConnection() na linha abaixo como:
Connection con = new ConnectionFactory();
con.getConnection();
Ele gera um erro pedindo para ser feito casting para “Connection” ?
@Allanflyk2 ,
ConnectionFactory
é uma classe, Connection
é outra.
Você está tentando guardar uma ConnectionFactory
dentro de um objeto da classe Connection
.
É como se você quisesse guardar um carro dentro de uma caixa de sapato, não tem como. Seria possível realizar esse cast caso ConnectionFactory
herdasse de Connection
, o que eu não acredito que seja o caso.
O certo seria:
ConnectionFactory factory = new ConnectionFactory();
Connection con = factory.getConnection();
Quando você faz new ConnectionFactory().getConnection()
, repare que um novo objeto de ConnectionFactory
é criado com o new
. Esse objeto retornado pelo new ConnectionFactory()
é utilizado imediatamente, porque você chama o método getConnection()
, que retorna uma Connection
. Assim que a Connection
é atribuida à variável con
, o objeto ConnectionFactory
que foi criado é descartado.
No segundo caso, você está capturando a referência para o objeto do ConnectionFactory
, fazendo
ConnectionFactory factory = new ConnectionFactory();
Dessa forma, você pode criar mais conexões a partir do mesmo objeto, se quiser!
Connection con1 = factory.getConnection();
Connection con2 = factory.getConnection();
1 curtida
Obrigado por sanar minha dúvida ![:slight_smile: :slight_smile:](//www.guj.com.br/images/emoji/twitter/slight_smile.png?v=5)