Problema estranho Java + Postgre

8 respostas
mxwebman

Boa noite. Estou montando um sistema em Java (JSP + Servlets) usando BD Postgre. O problema é que toda vez que rodo o programa e começo a usá-lo, aparecem várias instâncias do postgre no meu Windows. Veja a imagem abaixo:

Isso seria problema do Postgre ou algum erro no meu código?

Obrigado.

8 Respostas

ricardo.cocati

Boa noite amigo,

Pelo que vejo vc não está fechando sua conexão com o banco após o uso, poste seu código fica melhor pra explicar e solucionar.

mxwebman

ricardo.cocati:
Boa noite amigo,

Pelo que vejo vc não está fechando sua conexão com o banco após o uso, poste seu código fica melhor pra explicar e solucionar.

Segue abaixo o código de uma das classes de conexão:

package dao;

import java.sql.*;
import java.util.*;
import modelo.Categoria;

public class CategoriaDAO extends ConfigBD{
    
    private ResultSet r;
    private Connection c;
    private Statement s;
    
    public CategoriaDAO() {
        try{
            Class.forName(getDriver());
            c=DriverManager.getConnection(getHost(),getUsername(),getPassword());
            s=c.createStatement();
            
        }catch(Exception e){
            
        }
    }
    
    public String insert(Categoria cat){
        try{
            s.executeUpdate("insert into categoria(" +
                    "nome) values(" +
                    "'"+cat.getNome()+"')");            
            
            return getSuccessMessage();
            
        }catch(Exception e){
            return e.getMessage();
        }
    }
    
    public String delete(Categoria cat){
        try{
            s.executeUpdate("delete from categoria where id='"+cat.getId()+"'");
            return getSuccessMessage();
        }catch(Exception e){
            return e.getMessage();
        }
    }
    
    public String update(Categoria cat){
        try{
            s.executeUpdate("update categoria set " +
                    "nome='"+cat.getNome()+"' where id='"+cat.getId()+"' ");
            
            return getSuccessMessage();
            
        }catch(Exception e){
            return e.getMessage();
        }
    }
    
    public Categoria select(Categoria cat){
        
        try{
            r=s.executeQuery("select * from categoria where " +
                    "id='"+cat.getId()+"' or " +
                    "nome='"+cat.getNome()+"'");
            if(r.next()){
                cat.setId(r.getInt("id"));
                cat.setNome(r.getString("nome"));
            }
            return cat;
        }catch(Exception e){
            return null;
        }
    }
    
    public List list(){
        
        List list=null;
        Categoria cat;
           
        try{
            list=new ArrayList();
            r=s.executeQuery("select * from categoria order by nome");
            while(r.next()){
                cat=new Categoria();
                cat.setId(r.getInt("id"));
                cat.setNome(r.getString("nome"));
                list.add(cat);
            }
            return list;
        }catch(Exception e){
            return null;
        }
    }
    
    public List listByInput(Categoria cat, String ordem){
        
        List list=null;
           
        try{
            list=new ArrayList();
            r=s.executeQuery("select * from categoria where " +
                    "nome ilike '%"+cat.getNome()+"%' order by "+ordem);
            while(r.next()){
                cat=new Categoria();
                cat.setId(r.getInt("id"));
                cat.setNome(r.getString("nome"));
                list.add(cat);
            }
            return list;
        }catch(Exception e){
            return null;
        }
    }
}
francislon

É como o amigo de cima falou, você não está fechando sua conexão em lugar nenhum.

mxwebman

É, eu imaginei que fosse isso. Agora vem a minha pergunta idiota: e como eu fecho a conexão, hehehe? :wink:

francislon
leandrovrb

ha varias formas de desconectar uma conexao,uma delas é como passarei abaixo: isto vc vai definir no proprio class conexao!

public void desconect() { boolean result = true; try { conexao.close(); JOptionPane.showMessageDialog(null,"Banco Fechado"); } catch (SQLException fecha) { JOptionPane.showMessageDialog(null,"Nao foi possivel "+"fechar o banoc de dados: "+ fecha.getMessage()); result=false; }

mxwebman

Coloquei um “c.close()” antes de cada return do TRY, conforme abaixo, e funcionou beleza.

public String insert(Categoria cat){  
     try{  
          s.executeUpdate("insert into categoria(" +  
                     "nome) values(" +  
                     "'"+cat.getNome()+"')");              
          
          c.close();     
          return getSuccessMessage();  
               
     }catch(Exception e){  
          return e.getMessage();  
     }
}

É suficiente isso? Abraços.

leandrovrb

O codigo cada um adapata ao que achar melhor, se voce vio no gerenciador que nao esta mais aberta a conexao esta ok.

Flw

Criado 23 de novembro de 2008
Ultima resposta 28 de nov. de 2008
Respostas 8
Participantes 4