E ae pessoal do fórum do GUJ.
Estou com esse problema há algumas semanas e ainda não encontrei uma solução para o mesmo.
Uso o banco de dados PostgreSQL, e sempre que eu faço uma busca no banco usando a minha aplicação, ele abre uma conexão porem não a fecha, quando eu abre o CTRL ALT DEL, posso ver que para cada busca ele abre um processo do postgres.exe e não fecha após retornar os dados da busca, simplesmente ficam em aberto, após um grande numero de buscas o banco trava alegando que o limite máximo de conexões foi excedido.
Estou utilizando MVC para desenvolver
Essa é a minha classe que abre a conexão:
package Model;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
public class EntidadeConexao {
private final String url = "jdbc:postgresql://localhost:5432/ordem_servico_db";
private final String pass = "123";
private final String user = "postgres";
public Connection abreConexao() throws SQLException {
return DriverManager.getConnection(url,user,pass);
}
}
E essa é a classe que faz a busca no banco
package DAO;
import Controller.ValidaLoginUsuario;
import Model.EntidadeConexao;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
public class UsuariosDAO extends EntidadeConexao {
private Boolean statusLogin;
ValidaLoginUsuario retornaControle = new ValidaLoginUsuario();
public void AutenticaLogin(String usuario, String senha) throws SQLException{
ResultSet rset = null;
PreparedStatement prs = null;
String sql = "SELECT usuario,senha FROM usuario WHERE usuario = '"+usuario+"' and senha ='"+senha+"'";
try {
prs = abreConexao().prepareStatement(sql);
rset = prs.executeQuery();
if(rset.next() == true) {
prs.close();
rset.close();
abreConexao().close();
statusLogin = true;
retornaControle.setStatus(statusLogin);
retornaControle.statusDoLogin();
} else {
prs.close();
rset.close();
abreConexao().close();
statusLogin = false;
retornaControle.setStatus(statusLogin);
retornaControle.statusDoLogin();
}
} catch(SQLException e) {
try {
prs.close();
rset.close();
abreConexao().close();
} catch(SQLException e2) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
} finally{
prs.close();
rset.close();
abreConexao().close();
}
}
}
Estou dando close de todos os jeitos possíveis mas mesmo assim a conexão permanece ativa.