Boa tarde galera,
to com um problema aqui que esta me deixando louco!!!
tenho um programa que verifica se existe dados novos em um banco e atualiza o outro.
segue minha classe de conexao com os dois bancos…
BANCO 1
public class Conexao{
private Connection conexao;
Configuracao config = new Configuracao();
public Conexao(){
try{
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://"+config.getEndereco()+":"+config.getPorta()+"/";
url += config.getBanco();
conexao = DriverManager.getConnection(url,config.getUsuario(),config.getSenha());
}catch(Exception erro){
new log().grava("ERRO: Conexao() -> "+erro.getMessage());
}
}
public Connection getConexao(){
return conexao;
}
}
e
BANCO 2
public class Conexao2 extends Conexao{
private Connection conexao;
public Conexao2(){
try{
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://"+config.getEndereco2()+":"+config.getPorta2()+"/";
url += config.getBanco2();
conexao = DriverManager.getConnection(url,config.getUsuario2(),config.getSenha2());
}catch(Exception erro){
new log().grava("ERRO: Conexao() -> "+erro.getMessage());
}
}
@Override
public Connection getConexao(){
return conexao;
}
}
a questão é …
sempre que vou executar alguma instrução no banco, seja delete, update ou select, eu coloco sempre no try catch e no finally eu fecho a conexao…
exemplo:
public void FuncaoDML(String sql,String posto) throws SQLException, Exception
{
Conexao con;
if(posto.equals("MC 1"))
con = new Conexao();
else
con = new Conexao2();
try {
PreparedStatement com = con.getConexao().prepareStatement(sql);
com.executeUpdate();
} catch (Exception e) {
throw e;
}
finally
{
con.getConexao().close();
}
}
mas eu reparei que no servidor 2, ele abre e fecha a conexao perfeitamente. porem no servidor 1, algumas conexoes nao estao sendo fechadas e começam a se acumular até dar um
"FATAL: sorry, too many clients already". Rodando no debug, eu vi que as vezes ele passa pelo con.getConexao().close() mas nao fecha a conexao.
Alguem sabe o porque??
aguardo respostas…
Jean Gabriel