Acaba com a conexão(Muito estranho)

10 respostas
janjan

dah esse erro
java.sql.SQLException: Data source rejected establishment of connection, message from server: "Too many connections"

mas eu sei o por que da o erro soh que ele nao tem motivo pra dar!!
eu executo meu programa no netbeans dai ele fica chamando numa thread infinita uma tela
e com isso acaba abrindo conexoes e o mysql nega fogo!

vou postar a maneira como a conexão do sistema é feita dai voces me deem uma opiniao de como eh a melhor maneira de fazer e repassar a conexao para as telas do sistema
por que eu peguei o sistema anando e nao seria muito esperto da minha parte mudar tudo
mas preciso de opinioes vlw!!!

//esse eh apenas um metodo de uma classe
public static Connection Conecta(Connection Conexao) {

        String LocalBancoDados = "jdbc:mysql://localhost:3306/banco;
        String Usuario = "user";
        String Senha = "senha";
        String NomeDriver = "com.mysql.jdbc.Driver";

        try {
            Class.forName(NomeDriver).newInstance();
        } catch (InstantiationException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        }

        

        try {
            Conexao = (Connection) DriverManager.getConnection(LocalBancoDados, Usuario, Senha);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }


        return Conexao;

    }

No contrutor da classe que quero que teje conexao é feito o seguinte

//chama o metodo  acima...
Conexao = nomeDaClasse.Conecta(Conexao);
        try {
            st = Conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

        } catch (SQLException ex) {
            ex.printStackTrace();
        }

Detalhe que é uma aplicacao em swing

10 Respostas

T

Tudo que você abre tem de fechar; o garbage collector não toma conta tão bem dessas coisas quanto você mesmo.
Ele só toma bem conta da memória, não de conexões do banco de dados ou de arquivos abertos. Ele só fecha a conexão ou fecha arquivos quando você está com problemas de memória também.
Portanto, feche suas conexões quando for necessário. Não as deixe abertas sem necessidade.

janjan

tah ateh por ai eu sei! nao tem nada fechado no sistema!
mas ele nem se dah o trabalho de executar coisa que tava fazendo ateh a pouco
estou soh fazendo relatorios agora
e ele me trava assim!!! me desanima
dah vontade de excluir tudo e começar do zero!!
que droga…

janjan

Olha oque ele faz

no erro

java.sql.SQLException: Data source rejected establishment of connection, message from server: "Too many connections" at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:991) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2544) at com.mysql.jdbc.Connection.<init>(Connection.java:1474) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:185) at sgco.UtilJava.Conecta(UtilJava.java:109) at sgco.LocalizaDespesa.<init>(LocalizaDespesa.java:39) at sgco.movCaixa2.<init>(movCaixa2.java:37) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.MenuPrincipal.<init>(MenuPrincipal.java:21) at sgco.Main.main(Main.java:30) Exception in thread "main" java.lang.NullPointerException at sgco.LocalizaDespesa.<init>(LocalizaDespesa.java:42) at sgco.movCaixa2.<init>(movCaixa2.java:37) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.movCaixa2.<init>(movCaixa2.java:41) at sgco.TelaRel.<init>(TelaRel.java:249) at sgco.MenuPrincipal.<init>(MenuPrincipal.java:21) at sgco.Main.main(Main.java:30)

fica chamando só essas telas

T

Primeiro feche as conexões, que é esse o seu problema (ele está gritando na sua cara para ser resolvido).
Depois, reinicie o MySQL e teste novamente o seu programa. OK?

janjan

Mas tchê!!
ele soh arrebenta as conexoes por que ele executa as telas abrindo as conexoes até dar pau…
se elas nao abrissem ateh estourar nao matava o mysql…
esse eh o detalhe
e te respondendo eu dei um stmt.close() nelas!

T

Um construtor (não sei se sgco.TelaRel ou sgco.movCaixa2) está chamando recursivamente o outro (sgco.movCaixa2 ou sgco.TelaRel). Conserte isso.

T

Falei para fechar a conexão, não somente o statement. O seu MySQL esgotou o número de conexões possíveis, e não vá reclamar com o pessoal da MySQL (que casualmente é da Sun), porque essa limitação do número de conexões é dada pelo próprio sistema operacional, que não agüenta uma quantidade infinita de sockets.

janjan

eu instancio as duas classes sim
na classe do movCaixa eu instancio a telaRel
e na TelaRel instancio a movCaixa
mas em nenhum dos casos instancio no construtor
instancio somente na classe!!!

T

Eu falei “construtor” mas pelo jeito é na declaração da variável de instância. É que pelo stack trace não tenho como saber se é dentro do construtor ou na variável de instância. Mas dá para ver que isso que você fez está claramente errado, porque você só deve usar coisas recursivas se souber o que está fazendo.

janjan

sei!
bah vlw
vo ter que arrumar outra maneira de fazer essas chamadas
obrigado pelas dicas!!
to meio que frustrado hoje por causa disso, poso ter sido arrogante! (foi mal!)
flw
abraços

Criado 17 de dezembro de 2008
Ultima resposta 17 de dez. de 2008
Respostas 10
Participantes 2