Olá amigos. Estou com uma dúvida sobre o connection.createStatement() e gostaria de uma ajuda de vocês. Vamos lah.
Tenho uma classe que tem a função de realizar a conexão com o banco de dados e me retornar um connection, o nome dessa classe eh LRFConexao, segue o codigo:
import java.sql.*;
public class LRFConexao {
//Url de conexão
String is_url_banco = "jdbc:microsoft:sqlserver://dbsrv:1433;databasename=LRFCidadao;user=***;password=***";
//Classe utilizada para conexão
String is_classe_con= "com.microsoft.jdbc.sqlserver.SQLServerDriver";
//Faz a conexão com o banco de dados e retorna um Connection
public Connection getConnection() throws ClassNotFoundException, SQLException
{
Connection vlconn_retorno=null;
Class.forName(is_classe_con);
vlconn_retorno = DriverManager.getConnection(is_url_banco);
return vlconn_retorno;
}
}
Estou utilizando essa classe da seguinte forma:
(..)
vlconn_conexao = new LRFConexao().getConnection();
for(int i=0;i<50;i++){
vlstmt_query = vlconn_conexao.createStatement();
//Busca os dados
vlrst_resultado = vlstmt_query.executeQuery(vls_sql_base);
//Busco o metadado dos dados
vlrstmt_resultado = vlrst_resultado.getMetaData();
//Fechando o Statement
//vlrst_resultado.close();
//vlstmt_query.close();
}
vlconn_conexao.close();
Agora vamos o problema:
Mais ou menos a cada duas vezes que executo o createStatement(), monitorando as conexões ao banco de dados, vejo que é criada uma outra conexão. Como isso é possível se chamei o objeto de conexão somente uma vez? O createStatement() cria uma conexão interna para executar os seus processos? Algo ainda mais interessante, quando eu nao fecho o Statement (vlstmt_query.close()), mesmo fechando a conexão(vlconn_conexao.close()) as conexões realizadas (creio eu) pelo statement continuam lah. Não deveriam ser fechadas, já que a conexão foi fechada???
Agora se eu descomentar o codigo que fecha o statement
//Fechando o Statement
vlrst_resultado.close();
vlstmt_query.close();
acontece algo interessante, são criadas somente duas conexões, uma no momento da conexão e outra no momento do createStatement(), mesmo chamando o createStatement() novamente, ficam somente duas conexoes e quando fecho a conexão, essa conexao do statement também é fechada.
Fiquei curioso sobre isso. Alguém pode ajudar esse iniciante curioso?
Se para criar um statement preciso de uma conexao, pra que o statement está criando uma conexao com o banco?
Saúde e Paz
Gastão Júnior
[color=“green”][size=“9”]*Editado para adicionar o bbcode ;)[/size][/color]