Erro esquisito(pelo menos pra mim)

Tenho uma classe que tem um método estático que acessa o banco de dados e retorna um Statement.
Vários outros médotos de outras classes acessam esse método e usam o statement cada um pra sua função(atualização consulta etc).
Mas eu tenho um método que atualiza o banco mas pra isso ele chama outros metodos que fazem algumas consultas nesse mesmo banco. Todos esses métodos chamam a mesma classe e o mesmo método(o que retorna um statement)
Tudo funciona lindo mas num dado momento…se eu chamar várias vezes consecultivas esse método de atualizar(atráves de um botão na tela do usuário) ele começa a lançar a seguinte exceção:

java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.BindException: Address already in use: connect

E agora vem a parte esquisita. Feche o programa…conte até 100…abra o programa novamente e bum…funciona…fica apertando varias vezes o botão outra vez e ele lança novamente a exceção. Mas se vc fechar o programa e abrir logo em seguida ele lança novamente a exceção…tem q esperar um pouco…contar até 100 e abrir senão não funciona.

Alguém me explica porque isso acontece?
Ps. Sim eu coloquei um conect.close(); no final de todos os métodos que acessam o banco.

Oie. Tudo bão?!

Olha… posso estar enganado, mas acredito que seja pq, como você chama várias vezes o mesmo método estático, a aplicação abre várias conexões com o banco até ele começar a recusar conexões!

Depois de um tempo, aquelas threads que estavam ocupando as conexões vão sendo liberadas e o banco começa a aceitar novas conexões e, portanto, a aplicação começa a funcionar novamente!

Tente colocar um “synchronized” no seu método estático, por exemplo:

public static synchronized Statement getStatement();

Entendeu?! :slight_smile:

Espero ter ajudado. Abraço.

Então, obrigado pela resposta.
Era isso mesmo…eu estava excedendo o limite de conexões que o mysql aceitava.

Eu tava usando uma lógica muito idiota pro meu programa.
Conversando com um programador mais experiente ele me mostrou um jeito de usar o mesmo Statement pra todas as consultas e atualizações que eu fizer, ao invés de abrir uma nova conexão cada vez q precisasse fazer isso