Ola pessoal, gostaria de obter ajuda por aqui, ja pesquisei bastante tentei varias formas e sempre o mesmo erro. Eu criei um sistema com conexão ao MySql, em uma das funções esse sistema lê uma tabela de excel e insere no banco. Apos ler e inserir as primeiras linhas ele para no item 50 ±, antes de eu mudar a class de conexão ele dava um erro: too many connections apos inserir 150 itens ±, quando olho no server status do meu banco aparece as 152 conexões abertas e eu não consigo fechalas no meu metodo de adicionar. Alguem pode me ajudar?
//Início da classe de conexão//
public class Conexao {
public static String status = "Não conectou...";
//Método Construtor da Classe//
public Conexao() {
}
//Método de Conexão//
public static Connection getConexao() {
Connection connection = null; //atributo do tipo Connection
try {
//Carregando o JDBC Driver padrão
String driverName = "com.mysql.jdbc.Driver";
Class.forName(driverName);
//Configurando a nossa conexão com um banco de dados//
String serverName = "localhost"; //caminho do servidor do BD
String mydatabase = "registro_dth"; //nome do seu banco de dados
String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
String username = "root"; //nome de um usuário de seu BD
String password = "usuario123"; //sua senha de acesso
connection = DriverManager.getConnection(url, username, password);
//Testa sua conexão//
if (connection != null) {
status = ("STATUS--->Conectado com sucesso!");
} else {
status = ("STATUS--->Não foi possivel realizar conexão");
}
return connection;
} catch (ClassNotFoundException e) { //Driver não encontrado
System.out.println("O driver expecificado nao foi encontrado.");
return null;
} catch (SQLException e) {
//Não conseguindo se conectar ao banco
System.out.println("Nao foi possivel conectar ao Banco de Dados.");
return null;
}
}
//Método que retorna o status da sua conexão//
public static String statusConection() {
return status;
}
//Método que fecha sua conexão//
public static boolean FecharConexao() {
try {
Conexao.getConexao().close();
return true;
} catch (SQLException e) {
return false;
}
}
//Inicio da class com metodo adiciona
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import br.conexao.com.Conexao;
public class AtributosDoBancoDAO {
private Connection connection = null;
private PreparedStatement preparedStatement = null;
public AtributosDoBancoDAO(){
new Conexao();
this.connection = Conexao.getConexao();
}
//metode de adicionar ao banco. Usado pelo class Excel Adiciona
public void adiciona(AtributosDoBanco dados)throws SQLException, IOException{
String Query = " SELECT no_serie FROM dth_gvt WHERE no_serie =? AND saida = 'false' ";
PreparedStatement statos = connection.prepareStatement(Query);
statos.setLong(1, dados.getNo_serie());
ResultSet rs = statos.executeQuery();
if(rs.next()){
JOptionPane.showMessageDialog(null,"Este numero de serie ja Existe",Query, 1);
if(preparedStatement != null){
//comparar o select com no_serie e dt_saida = 0,se ouver algum numero duplicado
//tem que mandar para outra tabela e deletar depois
preparedStatement.close();
}
}else{
Conexao.ReiniciarConexao();
String sql = "INSERT INTO dth_gvt " + "(no_serie,casId,cartao,mac,denominacao,codigo_material,Vl_unitario,no_pedido,no_fiscal,dt_criacao,observacao) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
try{
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setLong(1, dados.getNo_serie());
stmt.setLong(2, dados.getCasId());
stmt.setLong(3, dados.getCartao());
stmt.setString(4, dados.getMac());
stmt.setString(5, dados.getDenominacao());
stmt.setString(6, dados.getCodigo_material());
stmt.setDouble(7, dados.getVl_unitario());
stmt.setInt(8, dados.getNo_pedido());
stmt.setInt(9, dados.getNo_fiscal());
stmt.setString(10, dados.getDt_criacao());
stmt.setString(11, dados.getObservacao());
stmt.execute();
stmt.close();
}finally {
try {
if(preparedStatement != null){
preparedStatement.close();
}
Conexao.ReiniciarConexao();
} catch (SQLException e) {
// LOGGING
e.printStackTrace();
}
}
}
}
//metodo para atualizar o banco apos a entrada
public void alteraEntrada (AtributosDoBanco dados) throws SQLException{
String Query = " SELECT no_serie FROM dth_gvt WHERE no_serie =? AND no_fiscal=? AND no_pedido=?";
PreparedStatement statos = connection.prepareStatement(Query);
statos.setLong(1, dados.getNo_serie());
statos.setInt(2, dados.getNo_fiscal());
statos.setInt(3, dados.getNo_pedido());
ResultSet rs = statos.executeQuery();
if(rs.next()){
String sql = "UPDATE dth_gvt SET casId=?,cartao=?,mac=?,observacao=?,dt_entrada=? WHERE no_serie=?";
try{
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setLong(1, dados.getCasId());
stmt.setLong(2, dados.getCartao());
stmt.setString(3, dados.getMac());
stmt.setString(4, dados.getObservacao());
stmt.setString(5, dados.getDt_entrada());
stmt.setLong(6, dados.getNo_serie());
stmt.execute();
stmt.close();
}catch (SQLException e){
throw new RuntimeException(e);
}
}else{
JOptionPane.showMessageDialog(null,"Por Favor Verifique o Numero de Serie e Nota Fiscal");
}
}
//metodo de Pesquisa simples
public void pesquisa(AtributosDoBanco dados){
String con = "SELECT no_serie, casId, cartao,mac, denominacao, no_fiscal, no_pedido, dt_entrada, observacao FROM dth_gvt WHERE no_serie=?";
try {
PreparedStatement prep = connection.prepareStatement(con);
prep.setLong(1, dados.getNo_serie());
ResultSet rs = prep.executeQuery();
rs.next();
long noSerie = rs.getLong("no_serie");
long casId = rs.getLong("casId");
long cartao = rs.getLong("cartao");
String mac = rs.getString("mac");
String denominacao = rs.getString("denominacao");
int notafiscal = rs.getInt("no_fiscal");
int pedido = rs.getInt("no_pedido");
String dt_entrada = rs.getString("dt_entrada");
String observacao = rs.getString("observacao");
prep.execute();
prep.close();
JOptionPane.showMessageDialog(null,"N° Serie: "+noSerie+"\n"+"N° CasId: "+casId+"\n"+"N° Cartao: "+cartao+"\n"+"Mac@: "+mac+"\n"+"Denominação: "+denominacao+"\n"+"N° Nota Fiscal: "+notafiscal+"\n"+"N° Pedido: "+pedido+"\n"+"Observação: "+String.valueOf(observacao)+"\n"+"Data Entrada: "+dt_entrada);
}catch (SQLException e){
throw new RuntimeException(e);
}
}
//metodo para atualizar o banco apos a saida
public void alteraSaida (AtributosDoBanco dados) throws SQLException{
String Query = " SELECT no_serie FROM dth_gvt WHERE no_serie =? AND saida = 'true'";
PreparedStatement statos = connection.prepareStatement(Query);
statos.setLong(1, dados.getNo_serie());
ResultSet rs = statos.executeQuery();
if(rs.next()){
String sql = "UPDATE dth_gvt SET dt_saida=?, observacao=?, saida='true' WHERE no_serie=?";
try{
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setLong(1, dados.getCasId());
stmt.setLong(2, dados.getCartao());
stmt.setLong(3, dados.getNo_serie());
stmt.execute();
stmt.close();
}catch (SQLException e){
throw new RuntimeException(e);
}
}else{
JOptionPane.showMessageDialog(null,"Por Favor Verifique o Numero de Serie");
}
}
}