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?
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:
packagedao;importjava.sql.*;importjava.util.*;importmodelo.Categoria;publicclassCategoriaDAOextendsConfigBD{privateResultSetr;privateConnectionc;privateStatements;publicCategoriaDAO(){try{Class.forName(getDriver());c=DriverManager.getConnection(getHost(),getUsername(),getPassword());s=c.createStatement();}catch(Exceptione){}}publicStringinsert(Categoriacat){try{s.executeUpdate("insert into categoria("+"nome) values("+"'"+cat.getNome()+"')");returngetSuccessMessage();}catch(Exceptione){returne.getMessage();}}publicStringdelete(Categoriacat){try{s.executeUpdate("delete from categoria where id='"+cat.getId()+"'");returngetSuccessMessage();}catch(Exceptione){returne.getMessage();}}publicStringupdate(Categoriacat){try{s.executeUpdate("update categoria set "+"nome='"+cat.getNome()+"' where id='"+cat.getId()+"' ");returngetSuccessMessage();}catch(Exceptione){returne.getMessage();}}publicCategoriaselect(Categoriacat){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"));}returncat;}catch(Exceptione){returnnull;}}publicListlist(){Listlist=null;Categoriacat;try{list=newArrayList();r=s.executeQuery("select * from categoria order by nome");while(r.next()){cat=newCategoria();cat.setId(r.getInt("id"));cat.setNome(r.getString("nome"));list.add(cat);}returnlist;}catch(Exceptione){returnnull;}}publicListlistByInput(Categoriacat,Stringordem){Listlist=null;try{list=newArrayList();r=s.executeQuery("select * from categoria where "+"nome ilike '%"+cat.getNome()+"%' order by "+ordem);while(r.next()){cat=newCategoria();cat.setId(r.getInt("id"));cat.setNome(r.getString("nome"));list.add(cat);}returnlist;}catch(Exceptione){returnnull;}}}
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?
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.
publicStringinsert(Categoriacat){try{s.executeUpdate("insert into categoria("+"nome) values("+"'"+cat.getNome()+"')"); c.close(); returngetSuccessMessage(); }catch(Exceptione){returne.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.