Alguem sabe me dizer se quando faco o comando
…
stmtMeuStatement = conexao.prepareStatement(minhaString);
…
uma nova conexao é aberta com o BD? Isso esta acontecendo realmente.
Gostaria de saber se existe alguma opcao o configuracao para que isso nao aconteca
Pela especificação do JDBC este método não deveria em hipótese alguma abrir outra conexão com o banco.
Resta saber se o Driver JDBC que voce está usando, segue as especificações da JavaSoft.
Ou Seja, considere que este conjunto de métodos NÃO VAI ABRIR uma nova conexão.
[]'s
D
danielcordeiro
Estou usando o BD MSSQLServer 2000 e o driver jdbc da microsoft baixado no site da microsoft.
Sempre que dou o comando :
stmt=conexao.prepareStetement(string);
mais de uma vez com o mesmo objeto conexao uma nova conexao é aberta com a base (posso verificar isso no manager do sqlserver)
obs. : quando faco esse comando apenas uma vez nao é aberta nova conexao.
Será que uma conexao suporta apenas um PrepredStatement?
Obrigado.
ozielneto
Acho que esse comportamento deve-se ao Driver que voce está usando…
Tente trocar o Driver…
dukejeffrie
Pode também ser o banco, ele mencionou Microsoft…
O caso é que um Statement deve ser independente dos outros statements na mesma conexão: por exemplo, cada um tem um resultset separado, e execução independente.
Para forçar isso num banco onde cada conexão tem apenas um ResultSet(!), o driver pode gerar outra conexão de baixo nível, manter as duas associadas com o mesmo objeto Connection, mas dar cada uma a um Statement diferente.
Talvez seja hora de vc contar pra gente por que vc não quer que o banco receba mais conexões de baixo nível. Lembre-se que fechar os Statements é responsabilidade sua, com o método close(), mas o JDBC se vira para prover as funcionalidades que vc precisa…
provavelmente ainda dá tempo de vc mudar pro Postgres…
[]s
D
danielcordeiro
Estou desenvolvendo um sistema p/web e o problema é o seguinte:
Gostaria se possiel de alguma indicação de driver que gerenciasse melhor isso pois nao posso mudar de BD (ordens da empresa).
Agredeço.
[]s
Rafael_Steil
Basta voce abrir uma unica conexao por usuario, e nao uma por statement. O unico trabalho que voce tera eh ter que passar os objetos Connection pegos do pool entre os metodos.
Rafael
dukejeffrie
isso não adianta, pq o JDBC não tá colaborando com ele.
ele abre um statement com a mesma Connection, e internamente o JDBC abre outra conexão com o banco.
Acabei de lembrar que existem vários drivers que suportam MSSQL… tenta achar um mais novo… c tá usando o driver da Microsoft?? Tenta usar o jTDS, projeto no sourceforge.
[]s
Rafael_Steil
Nao sei se eh bem isso ( apesar de ja ter ouvido relatos sobre o que voce comecou ). Veja, se internamente o JDBC abre conexoes com o banco, o pool dele nao deveria esvaziar “sozinho”… ou o jdbc “adivinha” que tem um pool e puxa de la?
Eu faco o lance de passar as Connection e pra requisicao toda uso somente uma unica conexao… do pool eu tenho certeza que somente sao puxadas as necessarias…
Rafael
D
danielcordeiro
Tiago,
sabe me dizer se esse driver jTDS da sourceforge da suporte a pool de conexoes?