Olá, estou fazendo uma pagina que faz algumas interações com o banco. Até aí tudo bem, só que comecei a pensar sobre como minha classe que faz acesso ao banco de dados gerencia a conexão.
Basicamente assim que a classe é instanciada eu tento pegar uma conexão, assim:
A parte do Class.forName(DRIVER) é que eu não entendo… Eu não coloco pra ele colocar o retorno dessa função para nenhuma variável, ela simplesmente carrega e pronto? Alguém sabe mais afundo como isso funciona?
No caso, para eu fechar essa conexão que eu criei, eu simplesmente estou setando a variável conexao para NULL, seria isso? Eu sei que existe o método close, mas só de apontar como null, o garbage collector já não destrói a instancia e consequentemente a conexão?
O método estático Class.forName(“String”); permite instanciar em tempo de execução (RunTime) uma classe qualquer, que no caso ele instancia a classe do Driver passado em parâmetro, é um conceito chamado Reflections do Java que também não manjo 100%, mas na teoria ele funciona assim, instancia qualquer classe passada por String ou lança ClassNotFoundException quando uma String não referência uma classe válida, e me corrijam caso esteja errado, mas o método DriverManager.getConnection() pega uma classe instanciada em Runtime e executa sua função com base nos parâmetros URL, USUARIO e SENHA.
Hebert_Coelho
Liberokain:
Olá, estou fazendo uma pagina que faz algumas interações com o banco. Até aí tudo bem, só que comecei a pensar sobre como minha classe que faz acesso ao banco de dados gerencia a conexão.
Basicamente assim que a classe é instanciada eu tento pegar uma conexão, assim:
A parte do Class.forName(DRIVER) é que eu não entendo… Eu não coloco pra ele colocar o retorno dessa função para nenhuma variável, ela simplesmente carrega e pronto? Alguém sabe mais afundo como isso funciona?
No caso, para eu fechar essa conexão que eu criei, eu simplesmente estou setando a variável conexao para NULL, seria isso? Eu sei que existe o método close, mas só de apontar como null, o garbage collector já não destrói a instancia e consequentemente a conexão?
Obrigado desde já.
Mais a fundo não sei. Sei que com ela você irá registrar no seu programa essa classe que se encontra no JAR e você será feliz.
Não passe sua conexão para null, mas sim utilize o método commit(); e depois close.
L
Liberokain
Obg pelas respostas, nessa de “não use null, use commit e depois close”, se desse algum erro e conexão não fechasse, existe algum modo de saber quantas conexões estão abertas no banco?
caio.ribeiro.pereira
Uma boa prática muito utilizada com JDBC é fazer para cada método com o banco de dados igual ao exemplo abaixo…
publicclassClienteDAO{privateConnectioncon=newConnectionFactory().getConnection();publicvoidsalvar(Clientecliente){Stringsql="insert into cliente (nome,email,endereco) values (?,?,?)";PreparedStatementstmt=con.prepareStatement(sql);stmt.setString(1,"Josivaldo Mesquita Alvares da Silva Sauro Mendonça Leite Melo Gonçalvez Tolentino Junior");stmt.setString(2,"[email removido]");stmt.setString(3,"Rua Dalvo Trombeta, 667");stmt.execute();// Fecha conexão de execução de queriesstmt.close();// Verifica se há conexões abertasif(con.isClosed!=true){con.close();}}}