[RESOLVIDO] Dúvida sobre Connection da java.sql

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: