[RESOLVIDO] Ajuda com erro de connecao "Too many connections"?

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?

Por que não verificar se a conexão está aberta antes de cada teste? Não é complicado colocar essa lógica num método em separado e chamá-lo onde for necessário. A propósito, a menos que você queira aproveitar sua conexão para várias operações, vale a pena incluir um bloco finally em seus métodos para fechar a conexão. (Este comentário vale também para Statement’s e PreparedStatement’s).

Bom dia,

Pelo erro acredito é na hora de fechar a conexao, tenta fechar no finally, segue uma classe para vc seguir como exemplo :

package br.com.fiap.persistencia.dao.hsqldb;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import javax.swing.text.html.HTMLDocument.HTMLReader.PreAction;

import br.com.fiap.beans.Livro;
import br.com.fiap.persistencia.dao.LivroDao;
import br.com.fiap.persistencia.dao.util.GerenciadorConexao;

public class HsqlLivroDao implements LivroDao {

@Override
public void delete(Livro livro) {
	// TODO Auto-generated method stub
	
}

@Override
public void insert(Livro livro) {
	Connection connection = null;
	PreparedStatement preparedStatement = null;
	try {
		connection =
			GerenciadorConexao.getInstancia().getConnection();			
		String comandoSql = "insert into livro(isbn,id_categoria,titulo,autor) values(?,?,?,?)";
		preparedStatement = connection.prepareStatement(comandoSql);
		preparedStatement.setString(1, livro.getIsbn());
		if ( livro.getCategoria() == null){
			preparedStatement.setNull(2,java.sql.Types.NULL);
		} else {
			preparedStatement.setInt(2, livro.getCategoria().getId());
		}
		preparedStatement.setString(3, livro.getTitulo());
		preparedStatement.setString(4, livro.getAutor());
		preparedStatement.executeUpdate();
		
	} catch (SQLException e) {
		// LOGGING
		e.printStackTrace();
	} finally {			
		try {
			if(preparedStatement != null){
				preparedStatement.close();
			}
			connection.close();
		} catch (SQLException e) {
			// LOGGING
			e.printStackTrace();
		}
	}
	
}

@Override
public void update(Livro livro) {
	// TODO Auto-generated method stub
	
}

@Override
public List<Livro> select() {
	// TODO Auto-generated method stub
	return null;
}

}

Flw,s

e ai agune , conseguiu ?

Posta ai pra gente oq você fez, se era isso mesmo

Caí no mesmo erro. Bem que o colega Agune, que foi ajudado e provavelmente conseguiu resolver seu problema, poderia ter respondido alguma coisa.

o meu dava erro de muitas conecções porque eu não usava a fabrica de conneccoes.
Se voce me passar o seu email posso lhe passar umas classes que uso como padrão para usar a minha connecção ao banco de dados

[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…

A aplicação é com struts 2. Estou resolvendo com um filtro capaz d abrir e fechar sessão.
Usando a idéia d Open Session in View.
obg