[quote=agune]Como posso evitar este erro?
java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
at agune.dao.ConnectionFactory.getConnection(ConnectionFactory.java:13)
at agune.dao.ClubeDAO.<init>(ClubeDAO.java:16)
at agune.objecto.Clube.<init>(Clube.java:12)
.....
estou a fazer testes do sobre dados que estao no meu banco de dados entao fasso testes para insercao, remocao e para eliminar. e tenho para cada um dos metodos eu tentei feichar a Connection so que quando passo para outro teste ele da erro e diz a conneccao foi encerrada!
Ex essa tinha sido a minha solucao apos executar cada metodo:
public void adiciona(Clube clube) {
String sql = "insert into clube (nome,localizacao,descricao) values (?,?,?)";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, clube.getNome());
stmt.setString(2, clube.getLocalizacao());
stmt.setString(3, clube.getDescricao());
stmt.execute();
stmt.close();
connection.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
E quando removo o connection.close() da-me esse erro acima! Alguma proposta?
[/quote]
olhe direito para a mensagem do erro (não foi no código que você passou, neste método adiciona):
java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
at agune.dao.ConnectionFactory.getConnection(ConnectionFactory.java:13)
at agune.dao.ClubeDAO.<init>(ClubeDAO.java:16)
at agune.objecto.Clube.<init>(Clube.java:12)
.....
a mensagem do erro está dizendo que quando você tenta obter a conexão não consegue por que muitas conexões ja estão abertas na sua fonte, o data source… sele está configurado para 15 conexões por exemplo, isso significa que ja está com 15 conexões sendo utilizadas (e provavelmente no seu código em certos lugares não está passando pelo método close()).
aprenda a analisar stack trace, nesse caso ai diz que o erro ocorreu agune.dao.ConnectionFactory método getConnection, entre parenteses classe e linha de onde deu o erro. Na linha de baixo diz onde que foi chamado o método informado acima, no mesmo formato, agune.dao.ClubeDAO, na inicialização da classe, entre parenteses diz classe e linha, no caso linha 16 e por ai vai até o main ou uma quantidade de itens do stack que será exibida caso ele seja muito grande.
em resumo, trate seus erros, coloque sempre entre try catch os lugares que pode dar erro, feche suas conexões no finally destes trys…