Erro: Too many connections

5 respostas
eduardoluiz.ribeiro

Olá galera, estou criando uma apllicação aqui porem, as vezes, quando tento conectar ao BD ele dá esse erro too many connections, ja pesquisei para saber sobre ele, e descobri que ele só ocorre quando um número limites de usuários do BD foi atingido. Aí é que mora o problema pq só eu estou fazendo acesso a ele mais ninguem da rede faz isso, será que é alguma resultset, ou conexao que eu tenho que fechar? valew galera!

5 Respostas

davidbuzatto

Sim, provavelmente suas conexões não estão sendo fechadas. Sempre feche tudo para liberar os recursos do banco.

jwalker

Bom dia,
Com o davidbuzatto dice, tem que fechar sempre…

te aconselho a fazer algo tipo:

ResultSet  rs = null;
		try{
			rs = ...
		}catch(Exception e){
			   throw e;
		}finally{
			if ( rs != null ){
				if ( rs.getStatement() != null ){
					rs.getStatement().close();
				}
				rs.close();
			}
		}

Abraços

eduardoluiz.ribeiro

opa galera eu entendi realmente o problema. agora eu queria saber como posso aplicar essa solução, eu ja estava tentando porem sem sucesso, a minha classe de percistencia no BD é essa, tentei fazer como o jwalker explicou mas n está funcionando.

package pacoteDAO;

import java.sql.*;

public class conexaoDAO {

private static Connection con = null;
private static Statement st = null;

    //Cria a conexao com o banco de dados
    private static void conexao(){
        try{
            Class.forName("org.gjt.mm.mysql.Driver");
           con = DriverManager.getConnection("jdbc:mysql://localhost:3306/clinica","root","root");
            st = con.createStatement();
        }
        catch(Exception ex)
        {}
    }//fim do método de conexao

public static ResultSet pesquisa(String campo, String tabela, String ordem){
        ResultSet rs=null;
        try{
            conexao();
            rs = st.executeQuery("select "+campo+" from "+tabela+" "+ordem);
            return(rs);
        }
        catch(Exception ex){
            return(null);
        }
    }//Fim do método pesquisa

public static ResultSet pesquisaGeral(String campo, String tabela,String parametro ,String ordem)
    {
        try{
            conexao();
            ResultSet rs = st.executeQuery("select "+campo+" from "+tabela+" where "+parametro+" "+ordem);
            return(rs);
        }
        catch(Exception ex){
            return(null);
        }
    }//Fim do método pesquisaGeral

public static int atualizaDado(String tabela, String campo, String parametro){
         try{
            conexao();
            int i = st.executeUpdate("update "+tabela+" set "+campo+" where "+parametro);
            return(i);
        }
        catch(Exception ex)
        {
            return(0);
        }
    }
}
eduardoluiz.ribeiro

fala agalera! consegui resolver, vou postar a solução.

public static ResultSet pesquisa(String campo, String tabela, String ordem) throws Exception{ ResultSet rs=null; try{ conexao(); rs = st.executeQuery("select "+campo+" from "+tabela+" "+ordem); return(rs); } catch(SQLException ex){ return(null); }finally{ if(rs != null){ if(rs.getStatement() != null){ rs.getStatement().close(); } rs.close(); } } }//Fim do método pesquisa

o problema quando eu ia fazer oque foi proposto pelo jwalker era que dava uma mensagem unreported Exception … e no fim falava algo sobre o throw (que jwalker ja tinha mostrado que precisava ser usado), porem usando do jeito que ele me mostrou n funfou aí pesquisando eu achei essa solução.
Legal o problema foi resolvido, mas alguém poderia me explicar pq usar o throws alí e não dentro do catch!? valew!

eduardoluiz.ribeiro

huahuahua tapa aqui descobre ali!!! galera consegui terminar porem quando executo o projeto da o seguinte erro: java.sql.SQLException: Operation not allowed after ResultSet closed bom isso ocorre pq eu fechei o resultset antes dele ser executado n é mesmo? como posso contornar isso?

Criado 29 de outubro de 2008
Ultima resposta 29 de out. de 2008
Respostas 5
Participantes 3