Boa Tarde, Estou tendo alguns problemas ao tentar retornar algumas conexões ao meu pool de conexões.
Era para elas fecharem, mas não estão fechando, mesmo que eu chame o con.close(); em meu finally! Não tem nem pilha de erros! Vou mandar minha classe de conexão para vcs dare um olhadela:
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.ConnectionPoolDataSource;
import javax.swing.JOptionPane;
import jdk.nashorn.internal.objects.NativeRegExp;
import org.postgresql.ds.PGConnectionPoolDataSource;
import org.postgresql.ds.PGPoolingDataSource;
import org.postgresql.jdbc2.optional.PoolingDataSource;
public class ConnectionFactory {
public static ConnectionFactory myInstance;
private static Connection connection = null;
private static ConnectionPoolDataSource datasource;
public ConnectionFactory() {
}
public static void DefineConexao (){
PGConnectionPoolDataSource source = new PGConnectionPoolDataSource();
source.setURL("jdbc:postgresql://localhost/comercio_bd");
//source.setDataSourceName("PoolTecSoft");
source.setServerName("127.0.0.1");
source.setPortNumber(5432);
source.setDatabaseName("comercio_bd");
source.setUser("postgres");
source.setPassword("");
datasource = source;
}
public Connection getConnection() throws SQLException {
try {
if (connection == null) {
DefineConexao();
}
if(connection == null || connection.isClosed()){
connection = datasource.getPooledConnection().getConnection();
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
return connection;
}
public static ConnectionFactory getInstance() {
if (myInstance == null) {
myInstance = new ConnectionFactory();
}
return myInstance;
}
public void Close(){
}
}
Segue um dos meus DAOs (tenho cerca de 32 prontos, vou mandar o de Fornecedores):
i/*
- To change this license header, choose License Headers in Project Properties.
- To change this template file, choose Tools | Templates
- and open the template in the editor.
*/
package DAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import model.EnderecoFornecedor;
import model.Fornecedor;
import model.Funcionario;
import model.TelefoneFornecedor;
import util.ConnectionFactory;
/**
*
-
@author Rafael
*/
public class FornecedorDAO {TelefoneFornecedorDAO tel = new TelefoneFornecedorDAO();
EnderecoFornecedorDAO end = new EnderecoFornecedorDAO();
private Connection con;public FornecedorDAO() throws Exception {
try {
con = ConnectionFactory.getInstance().getConnection();
} catch (Exception e) {
throw new Exception(e.getMessage());
}
}
public void Salvar(Fornecedor f, TelefoneFornecedor t, EnderecoFornecedor end) throws Exception {
PreparedStatement ps = null;
PreparedStatement ps2 = null;
PreparedStatement ps3 = null;
if (f == null) {
throw new Exception("Erro:Fornecedor não pode ser nulo!");
}
try {
try {
//con = ConnectionFactory.getInstance().getConnection();
String sql2 = "insert into tbl_telefone_fornecedor(id_telefone_fornecedor, telefone_fixo_fornecedor, celular1_fornecedor, celular2_fornecedor,flag_ativo)"
+ "values (NEXTVAL('sequencia_telefone_fornecedor'),?,?,?,1)";
ps2 = this.con.prepareStatement(sql2);
String sql3 = "insert into tbl_endereco_fornecedor(id_endereco_fornecedor,cidade_fornecedor,cep_fornecedor,estado_fornecedor,bairro_fornecedor,rua_fornecedor,numero_fornecedor,flag_ativo)"
+ " values (NEXTVAL('sequencia_endereco_fornecedor'),?,?,?,?,?,?,1)";
ps3 = this.con.prepareStatement(sql3);
String sql = " insert into tbl_fornecedor(id_fornecedor,nome_empresa,cnpj,ie,email,fk_telefone_fornecedor,fk_endereco_fornecedor,flag_ativo)"
+ "values (NEXTVAL('sequencia_fornecedor'),?,?,?,?, CURRVAL('sequencia_telefone_fornecedor'),CURRVAL('sequencia_endereco_fornecedor'),1)";
ps = this.con.prepareStatement(sql);
ps2.setString(1, t.getTelefoneFixo());
ps2.setString(2, t.getCelular1());
ps2.setString(3, t.getCelular2());
ps3.setString(1, end.getCidade());
ps3.setString(2, end.getCep());
ps3.setString(3, end.getEstado());
ps3.setString(4, end.getBairro());
ps3.setString(5, end.getRua());
ps3.setString(6, end.getNumero());
ps.setString(1, f.getNomeEmpresa());
ps.setString(2, f.getCnpjEmpresa());
ps.setString(3, f.getIeEmpresa());
ps.setString(4, f.getEmailEmpresa());
ps2.executeUpdate();
ps3.executeUpdate();
ps.executeUpdate();
ps2.close();
ps3.close();
ps.close();
} catch (Exception e) {
throw new Exception("Erro ao inserir os dados!" + e.toString());
}
} finally {
try {
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao fachar conexão:" + e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
}
}
public void Atualizar(Fornecedor f) throws Exception {
PreparedStatement ps = null;
if (f == null) {
throw new Exception("Erro:Fornecedor não pode ser nulo!");
}
try {
try {
//con = ConnectionFactory.getInstance().getConnection();
String sql = "update tbl_fornecedor set nome_empresa=? cnpj=? ie=? email=? ";
ps = con.prepareStatement(sql);
ps.setString(1, f.getNomeEmpresa());
ps.setString(2, f.getCnpjEmpresa());
ps.setString(3, f.getIeEmpresa());
ps.setString(4, f.getEmailEmpresa());
ps.executeUpdate();
ps.close();
} catch (Exception e) {
throw new Exception("Erro ao atualizar os dados!" + e.getMessage());
}
} finally {
try {
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao fachar conexão:" + e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
}
}
public void Deletar(Fornecedor f) throws Exception {
PreparedStatement ps = null;
if (f == null) {
throw new Exception("Erro:Fornecedor não pode ser nulo!");
}
try {
try {
//con = ConnectionFactory.getInstance().getConnection();
String sql = "update tbl_fornecedor set flag_ativo=?";
ps = con.prepareStatement(sql);
ps.setInt(1, f.getFlagEmpresa());
ps.executeUpdate();
ps.close();
} catch (Exception e) {
throw new Exception("Erro ao Deletar os dados!" + e.getMessage());
}
} finally {
try {
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao fachar conexão:" + e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
}
}
public ArrayList<Fornecedor> LerFornecedorCombo() throws Exception {
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<Fornecedor> lista = new ArrayList<>();
try {
try {
//con = ConnectionFactory.getInstance().getConnection();
ps = con.prepareStatement("select * from tbl_fornecedor");
rs = ps.executeQuery();
while (rs.next()) {
Fornecedor f = new Fornecedor();
f.setIdFornecedor(rs.getInt("id_fornecedor"));
f.setNomeEmpresa(rs.getString("nome_empresa"));
lista.add(f);
}
ps.close();
rs.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao pegar dados dos Fornecedores! " + e.toString(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
} finally {
try {
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao fachar conexão:" + e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
}
return lista;
}
public ArrayList<Fornecedor> ConsultaF() throws Exception {
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<Fornecedor> listaF = new ArrayList<>();
try {
try {
//con = ConnectionFactory.getInstance().getConnection();
String sql = "select forn.nome_empresa, forn.cnpj,forn.ie,"
+ " forn.email, tel.telefone_fixo_fornecedor, tel.celular1_fornecedor, "
+ "tel.celular2_fornecedor, ende.cidade_fornecedor from tbl_fornecedor forn"
+ " inner join tbl_telefone_fornecedor tel on "
+ " forn.fk_telefone_fornecedor = tel.id_telefone_fornecedor inner join tbl_endereco_fornecedor ende "
+ "on forn.fk_endereco_fornecedor = ende.id_endereco_fornecedor where forn.flag_ativo=1 ORDER BY forn.nome_empresa";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Fornecedor f = new Fornecedor();
TelefoneFornecedor tf = new TelefoneFornecedor();
EnderecoFornecedor ef = new EnderecoFornecedor();
f.setNomeEmpresa(rs.getString("nome_empresa"));
f.setCnpjEmpresa(rs.getString("cnpj"));
f.setIeEmpresa(rs.getString("ie"));
f.setEmailEmpresa(rs.getString("email"));
tf.setTelefoneFixo(rs.getString("telefone_fixo_fornecedor"));
tf.setCelular1(rs.getString("celular1_fornecedor"));
tf.setCelular2(rs.getString("celular2_fornecedor"));
ef.setCidade(rs.getString("cidade_fornecedor"));
f.setEndereçoEmpresa(ef);
f.setTelefoneEmpresa(tf);
listaF.add(f);
}
ps.close();
rs.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao buscar os dados dos Fornecedores!" + e.toString(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
} finally {
try {
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao fachar conexão:" + e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
}
return listaF;
}
public ArrayList<Fornecedor> ConsultaFNome(String nome) throws Exception {
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<Fornecedor> listaF = new ArrayList<>();
try {
try {
//con = ConnectionFactory.getInstance().getConnection();
String sql = "select forn.nome_empresa, forn.cnpj,forn.ie,"
+ " forn.email, tel.telefone_fixo_fornecedor, tel.celular1_fornecedor, "
+ "tel.celular2_fornecedor, e.cidade_fornecedor from tbl_fornecedor forn"
+ " inner join tbl_telefone_fornecedor tel on "
+ " forn.fk_telefone_fornecedor = tel.id_telefone_fornecedor inner join "
+ "tbl_endereco_fornecedor e on forn.fk_endereco_fornecedor = e.id_endereco_fornecedor"
+ " where forn.flag_ativo=1 and forn.nome_empresa like '%"
+ nome + "%' ORDER BY forn.nome_empresa";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Fornecedor f = new Fornecedor();
TelefoneFornecedor tf = new TelefoneFornecedor();
EnderecoFornecedor ef = new EnderecoFornecedor();
f.setNomeEmpresa(rs.getString("nome_empresa"));
f.setCnpjEmpresa(rs.getString("cnpj"));
f.setIeEmpresa(rs.getString("ie"));
f.setEmailEmpresa(rs.getString("email"));
tf.setTelefoneFixo(rs.getString("telefone_fixo_fornecedor"));
tf.setCelular1(rs.getString("celular1_fornecedor"));
tf.setCelular2(rs.getString("celular2_fornecedor"));
ef.setCidade(rs.getString("cidade_fornecedor"));
f.setEndereçoEmpresa(ef);
f.setTelefoneEmpresa(tf);
listaF.add(f);
}
ps.close();
rs.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao buscar os dados dos Fornecedores!" + e.toString(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
} finally {
try {
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao fachar conexão:" + e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
System.out.println("Conexão ConsultaFornecedornome Fechada");
}
return listaF
}
public ArrayList<Fornecedor> ConsultaFCod(int cod) throws Exception {
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<Fornecedor> listaF = new ArrayList<>();
try {
try {
//con = ConnectionFactory.getInstance().getConnection();
String sql = "select forn.nome_empresa, forn.cnpj,forn.ie,"
+ " forn.email, tel.telefone_fixo_fornecedor, tel.celular1_fornecedor, "
+ "tel.celular2_fornecedor, e.cidade_fornecedor from tbl_fornecedor forn"
+ " inner join tbl_telefone_fornecedor tel on "
+ " forn.fk_telefone_fornecedor = tel.id_telefone_fornecedor inner join "
+ "tbl_endereco_fornecedor e on forn.fk_endereco_fornecedor = e.id_endereco_fornecedor"
+ " where forn.flag_ativo=1 and forn.id_fornecedor ="
+ cod + " ORDER BY forn.id_fornecedor";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Fornecedor f = new Fornecedor();
TelefoneFornecedor tf = new TelefoneFornecedor();
EnderecoFornecedor ef = new EnderecoFornecedor();
f.setNomeEmpresa(rs.getString("nome_empresa"));
f.setCnpjEmpresa(rs.getString("cnpj"));
f.setIeEmpresa(rs.getString("ie"));
f.setEmailEmpresa(rs.getString("email"));
tf.setTelefoneFixo(rs.getString("telefone_fixo_fornecedor"));
tf.setCelular1(rs.getString("celular1_fornecedor"));
tf.setCelular2(rs.getString("celular2_fornecedor"));
ef.setCidade(rs.getString("cidade_fornecedor"));
f.setEndereçoEmpresa(ef);
f.setTelefoneEmpresa(tf);
listaF.add(f);
}
ps.close();
rs.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao buscar os dados dos Fornecedores!" + e.toString(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
} finally {
try {
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao fachar conexão:" + e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
System.out.println("Conexão ConsultaForncedorid Fechada");
}
return listaF;
}
public ArrayList<Fornecedor> ConsultaFCNPJ(String cnpj) throws Exception {
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<Fornecedor> listaF = new ArrayList<>();
try {
try {
//con = ConnectionFactory.getInstance().getConnection();
String sql = "select forn.nome_empresa, forn.cnpj,forn.ie,"
+ " forn.email, tel.telefone_fixo_fornecedor, tel.celular1_fornecedor, "
+ "tel.celular2_fornecedor, e.cidade_fornecedor from tbl_fornecedor forn"
+ " inner join tbl_telefone_fornecedor tel on "
+ " forn.fk_telefone_fornecedor = tel.id_telefone_fornecedor inner join "
+ "tbl_endereco_fornecedor e on forn.fk_endereco_fornecedor = e.id_endereco_fornecedor"
+ " where forn.flag_ativo=1 and forn.cnpj like '%"
+ cnpj + "%' ORDER BY forn.cnpj";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Fornecedor f = new Fornecedor();
TelefoneFornecedor tf = new TelefoneFornecedor();
EnderecoFornecedor ef = new EnderecoFornecedor();
f.setNomeEmpresa(rs.getString("nome_empresa"));
f.setCnpjEmpresa(rs.getString("cnpj"));
f.setIeEmpresa(rs.getString("ie"));
f.setEmailEmpresa(rs.getString("email"));
tf.setTelefoneFixo(rs.getString("telefone_fixo_fornecedor"));
tf.setCelular1(rs.getString("celular1_fornecedor"));
tf.setCelular2(rs.getString("celular2_fornecedor"));
ef.setCidade(rs.getString("cidade_fornecedor"));
f.setEndereçoEmpresa(ef);
f.setTelefoneEmpresa(tf);
listaF.add(f);
}
ps.close();
rs.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao buscar os dados dos Fornecedores!" + e.toString(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
} finally {
try {
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao fachar conexão:" + e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
System.out.println("Conexão ConsultaFornecedorcnpj Fechada");
}
return lista
}
public ArrayList<Fornecedor> ConsultaFCidade(String cidade) throws Exception {
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<Fornecedor> listaF = new ArrayList<>();
try {
try {
//con = ConnectionFactory.getInstance().getConnection();
String sql = "select forn.nome_empresa, forn.cnpj,forn.ie,"
+ " forn.email, tel.telefone_fixo_fornecedor, tel.celular1_fornecedor, "
+ "tel.celular2_fornecedor, e.cidade_fornecedor from tbl_fornecedor forn"
+ " inner join tbl_telefone_fornecedor tel on "
+ " forn.fk_telefone_fornecedor = tel.id_telefone_fornecedor inner join "
+ "tbl_endereco_fornecedor e on forn.fk_endereco_fornecedor = e.id_endereco_fornecedor"
+ " where forn.flag_ativo=1 and e.cidade_fornecedor like '%"
+ cidade + "%' ORDER BY e.cidade_fornecedor";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Fornecedor f = new Fornecedor();
TelefoneFornecedor tf = new TelefoneFornecedor();
EnderecoFornecedor ef = new EnderecoFornecedor();
f.setNomeEmpresa(rs.getString("nome_empresa"));
f.setCnpjEmpresa(rs.getString("cnpj"));
f.setIeEmpresa(rs.getString("ie"));
f.setEmailEmpresa(rs.getString("email"));
tf.setTelefoneFixo(rs.getString("telefone_fixo_fornecedor"));
tf.setCelular1(rs.getString("celular1_fornecedor"));
tf.setCelular2(rs.getString("celular2_fornecedor"));
ef.setCidade(rs.getString("cidade_fornecedor"));
f.setEndereçoEmpresa(ef);
f.setTelefoneEmpresa(tf);
listaF.add(f);
}
ps.close();
rs.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao buscar os dados dos Fornecedores!" + e.toString(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
} finally {
try {
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao fachar conexão:" + e.getMessage(), "Ops!", JOptionPane.ERROR_MESSAGE);
}
System.out.println("Conexão ConsultaFornecedorcidade Fechada");
}
return listaF;}
}
Todos os meus DAOs estão nessa mesma estrutura. Há alguma coisa errada na minha classe de conexão ou no DAO? O que devo fazer? Desde já agradeço!