Erros: java.sql.sqlnontransientconnectionexception: No operations allowed after connection closed" E "com.mysql.cj.jdbc.exceptions.communicationsexception: the last packet sussfully"

Olá, quando vou fazer conexão com o banco de dados dá certo, porém quando vou em uma tela para adicionar informações no banco de dados dá os seguintes erros:

“java.sql.sqlnontransientconnectionexception: No operations allowed after connection closed”

“com.mysql.cj.jdbc.exceptions.communicationsexception: the last packet sussfully”

Código da classe de conexão:
> public class ModuloConexao {

public static Connection conector(){
    java.sql.Connection conexao = null;

    String driver = "com.mysql.cj.jdbc.Driver";
    
    String url = "jdbc:mysql://213.190.6.127:3306/tabelaprogram?useTimezone=true&serverTimezone=UTC";
    String user = "program";
    String password = "432d346gyq";
    
    try {
        Class.forName(driver);
        conexao = DriverManager.getConnection(url, user, password);
        return conexao;
    } catch (Exception e) {
        System.out.println(e);
        return null;
    }
}

}

Alguém pode me ajudar a resolver?

Em algum momento você está tentando acessar o banco com a conexão fechada.

Posta o código das suas telas onde você acessa o banco.

/*
 * 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 br.com.tcc.telas;

import br.com.tcc.dal.ModuloConexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;

/**
 *
 * @author Mateus da Cruz
 */
public class GadoAdicionar extends javax.swing.JInternalFrame {
    Connection conexao = null;
    PreparedStatement pst = null;
    ResultSet rs = null;
    /**
     * Creates new form GadoAdicionar
     */

    private static String brincorastreado;
    private static String controleinterno;
    private static String nome;
    private static String raca;
    private static String nascimento;
    private static String peso;
    
    public String getBrincorastreado() {
        return brincorastreado;
    }

    public void setBrincorastreado(String brincorastreado) {
        this.brincorastreado = brincorastreado;
    }

    public String getControleinterno() {
        return controleinterno;
    }

    public void setControleinterno(String controleinterno) {
        this.controleinterno = controleinterno;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getRaca() {
        return raca;
    }

    public void setRaca(String raca) {
        this.raca = raca;
    }
    public void Limpar(){
        campo_brincorastreado.setText("");
        campo_controleinterno.setText("");
        campo_nome.setText("");
        campo_raca.setText("");
    }
    
    private static String idgado;
    private static int idgadoresult;

    public String getId() {
        return idgado;
    }
    
    public void setId(String idgado) {
        this.idgado = idgado;
    }
    
    public int getIdgadoresult() {
        return idgadoresult;
    }
    
    public void setIdgadoresult(int idgadoresult) {
            int idconv = Integer.parseInt(this.idgado);
        this.idgadoresult = idgadoresult + idconv;
    }
    
    public void UltimoID(){
        String sql = "select Max(id) from gado where iduser = ?";
        
        try {
            Login login = new Login();
            pst = conexao.prepareStatement(sql);
            
            pst.setString(1, login.getId());

            rs = pst.executeQuery();
            
            if(rs.next()){
            this.setId(rs.getString("Max(id)"));
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ERRO:\n" + e);
        }
    }
    
    public void Adicionar(){
        Login login = new Login();
        
        String sql = "INSERT INTO `gado` (`iduser`, `brincorastreado`, `controleinterno`, `nome`, `raca`, `nascimento`, `peso`, `genero`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
        
        try {
            pst = conexao.prepareStatement(sql);
            
            pst.setString(1, login.getId());
            pst.setString(2, campo_brincorastreado.getText());
            pst.setString(3, campo_controleinterno.getText());
            pst.setString(4, campo_nome.getText());
            pst.setString(5, campo_raca.getText());
            pst.setString(6, campo_nascimento.getText());
            pst.setString(7, campo_peso.getText());
            pst.setString(8, (String) caixa_sexo.getSelectedItem());
            
            int Adicionado = pst.executeUpdate();
            
            if(Adicionado > 0){
                JOptionPane.showMessageDialog(null, "Adicionado com sucesso!");
                Limpar();
                this.dispose();
            }else{
                JOptionPane.showMessageDialog(null, "Erro ao adicionar, tente novamente!");
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ERRO: " + e);
        }
    }
    
    public void Fechar(){
        this.dispose();
    }
    public GadoAdicionar() {
        initComponents();
        conexao = ModuloConexao.conector();
    }
    
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        Painel = new javax.swing.JDesktopPane();
        btn_add = new javax.swing.JButton();
        btn_fechar = new javax.swing.JButton();
        FundoBotão = new javax.swing.JLabel();
        FundoBotão1 = new javax.swing.JLabel();
        txt_controleinterno = new javax.swing.JLabel();
        txt_brincorastreado = new javax.swing.JLabel();
        txt_raça = new javax.swing.JLabel();
        txt_nome = new javax.swing.JLabel();
        campo_brincorastreado = new javax.swing.JTextField();
        campo_controleinterno = new javax.swing.JTextField();
        campo_nome = new javax.swing.JTextField();
        campo_raca = new javax.swing.JTextField();
        txt_brincorastreado1 = new javax.swing.JLabel();
        campo_nascimento = new javax.swing.JTextField();
        txt_controleinterno1 = new javax.swing.JLabel();
        campo_peso = new javax.swing.JTextField();
        txt_nome1 = new javax.swing.JLabel();
        caixa_sexo = new javax.swing.JComboBox<>();
        Título1 = new javax.swing.JLabel();
        Fundo = new javax.swing.JLabel();

        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameOpened(evt);
            }
        });
        getContentPane().setLayout(null);

        Painel.setBackground(new java.awt.Color(204, 204, 204));

        btn_add.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        btn_add.setForeground(new java.awt.Color(255, 255, 255));
        btn_add.setText("Adicionar");
        btn_add.setToolTipText("Adicionar");
        btn_add.setContentAreaFilled(false);
        btn_add.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        btn_add.setDefaultCapable(false);
        btn_add.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_addActionPerformed(evt);
            }
        });
        Painel.add(btn_add);
        btn_add.setBounds(600, 280, 90, 23);

        btn_fechar.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        btn_fechar.setForeground(new java.awt.Color(255, 255, 255));
        btn_fechar.setText("Fechar");
        btn_fechar.setToolTipText("Fechar");
        btn_fechar.setContentAreaFilled(false);
        btn_fechar.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        btn_fechar.setDefaultCapable(false);
        btn_fechar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_fecharActionPerformed(evt);
            }
        });
        Painel.add(btn_fechar);
        btn_fechar.setBounds(450, 280, 90, 23);

        FundoBotão.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        FundoBotão.setIcon(new javax.swing.ImageIcon(getClass().getResource("/tcc/img/Layout Botão 90x23.png"))); // NOI18N
        Painel.add(FundoBotão);
        FundoBotão.setBounds(600, 280, 90, 23);

        FundoBotão1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        FundoBotão1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/tcc/img/Layout Botão 90x23.png"))); // NOI18N
        Painel.add(FundoBotão1);
        FundoBotão1.setBounds(450, 280, 90, 23);

        txt_controleinterno.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        txt_controleinterno.setForeground(new java.awt.Color(255, 255, 255));
        txt_controleinterno.setText("Controle Interno:");
        Painel.add(txt_controleinterno);
        txt_controleinterno.setBounds(50, 190, 123, 17);

        txt_brincorastreado.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        txt_brincorastreado.setForeground(new java.awt.Color(255, 255, 255));
        txt_brincorastreado.setText("Brinco Rastreado:");
        Painel.add(txt_brincorastreado);
        txt_brincorastreado.setBounds(50, 140, 124, 17);

        txt_raça.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        txt_raça.setForeground(new java.awt.Color(255, 255, 255));
        txt_raça.setText("Raça:");
        Painel.add(txt_raça);
        txt_raça.setBounds(140, 290, 40, 17);

        txt_nome.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        txt_nome.setForeground(new java.awt.Color(255, 255, 255));
        txt_nome.setText("Nome:");
        Painel.add(txt_nome);
        txt_nome.setBounds(130, 240, 50, 17);

        campo_brincorastreado.setToolTipText("");
        campo_brincorastreado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                campo_brincorastreadoActionPerformed(evt);
            }
        });
        Painel.add(campo_brincorastreado);
        campo_brincorastreado.setBounds(190, 130, 170, 30);
        Painel.add(campo_controleinterno);
        campo_controleinterno.setBounds(190, 180, 170, 30);
        Painel.add(campo_nome);
        campo_nome.setBounds(190, 230, 170, 30);
        Painel.add(campo_raca);
        campo_raca.setBounds(190, 280, 170, 30);

        txt_brincorastreado1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        txt_brincorastreado1.setForeground(new java.awt.Color(255, 255, 255));
        txt_brincorastreado1.setText("Data De Nascimento:");
        Painel.add(txt_brincorastreado1);
        txt_brincorastreado1.setBounds(380, 140, 150, 17);

        campo_nascimento.setText("DD/MM/AAAA");
        campo_nascimento.setToolTipText("");
        campo_nascimento.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                campo_nascimentoActionPerformed(evt);
            }
        });
        Painel.add(campo_nascimento);
        campo_nascimento.setBounds(540, 130, 170, 30);

        txt_controleinterno1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        txt_controleinterno1.setForeground(new java.awt.Color(255, 255, 255));
        txt_controleinterno1.setText("Peso:");
        Painel.add(txt_controleinterno1);
        txt_controleinterno1.setBounds(490, 190, 38, 17);
        Painel.add(campo_peso);
        campo_peso.setBounds(540, 180, 170, 30);

        txt_nome1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        txt_nome1.setForeground(new java.awt.Color(255, 255, 255));
        txt_nome1.setText("Sexo:");
        Painel.add(txt_nome1);
        txt_nome1.setBounds(490, 240, 40, 17);

        caixa_sexo.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Macho", "Fêmea" }));
        Painel.add(caixa_sexo);
        caixa_sexo.setBounds(540, 230, 170, 30);

        Título1.setFont(new java.awt.Font("Tahoma", 1, 48)); // NOI18N
        Título1.setForeground(new java.awt.Color(255, 255, 255));
        Título1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        Título1.setText("Adicionar Gado");
        Painel.add(Título1);
        Título1.setBounds(10, 30, 790, 60);

        Fundo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/tcc/img/Fundos TCC.png"))); // NOI18N
        Fundo.setToolTipText("");
        Painel.add(Fundo);
        Fundo.setBounds(4, 24, 800, 350);

        getContentPane().add(Painel);
        Painel.setBounds(-10, -30, 800, 640);

        setBounds(0, 0, 800, 361);
    }// </editor-fold>                        

    private void btn_addActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        Adicionar();
    }                                       

    private void campo_brincorastreadoActionPerformed(java.awt.event.ActionEvent evt) {                                                      
        // TODO add your handling code here:
    }                                                     

    private void btn_fecharActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        Fechar();
    }                                          

    private void campo_nascimentoActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        // TODO add your handling code here:
    }                                                

    private void formInternalFrameOpened(javax.swing.event.InternalFrameEvent evt) {                                         
        // TODO add your handling code here:
        UltimoID();
    }                                        


    // Variables declaration - do not modify                     
    private javax.swing.JLabel Fundo;
    private javax.swing.JLabel FundoBotão;
    private javax.swing.JLabel FundoBotão1;
    private javax.swing.JDesktopPane Painel;
    private javax.swing.JLabel Título1;
    private javax.swing.JButton btn_add;
    private javax.swing.JButton btn_fechar;
    public static javax.swing.JComboBox<String> caixa_sexo;
    public static javax.swing.JTextField campo_brincorastreado;
    public static javax.swing.JTextField campo_controleinterno;
    public static javax.swing.JTextField campo_nascimento;
    public static javax.swing.JTextField campo_nome;
    public static javax.swing.JTextField campo_peso;
    public static javax.swing.JTextField campo_raca;
    private javax.swing.JLabel txt_brincorastreado;
    private javax.swing.JLabel txt_brincorastreado1;
    private javax.swing.JLabel txt_controleinterno;
    private javax.swing.JLabel txt_controleinterno1;
    private javax.swing.JLabel txt_nome;
    private javax.swing.JLabel txt_nome1;
    private javax.swing.JLabel txt_raça;
    // End of variables declaration                   
}

Edita seu post formatando o código adequadamente com o botão de texto pré-formatado </>

Pronto ;d

1 curtida

Tem certeza de que não está chamando o método close() da Connection em nenhuma outra classe?
De repente na classe Login?

Experimenta implementar o seu ModuloConexao dessa forma e veja se o problema persiste:

import java.sql.Connection;
import java.sql.DriverManager;

public final class ModuloConexao {

    private static Connection conexao;

    public static synchronized Connection conector() {
        try {
            if (conexao == null || conexao.isClosed()) {
                String driver = "com.mysql.cj.jdbc.Driver";
                String url = "jdbc:mysql://213.190.6.127:3306/tabelaprogram?useTimezone=true&serverTimezone=UTC";
                String user = "program";
                String password = "432d346gyq";
                Class.forName(driver);
                conexao = DriverManager.getConnection(url, user, password);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conexao;
    }

    private ModuloConexao() {}
}

Olá, tentei o código que você mandou, continua dando o mesmo erro, já verifiquei todas as classes, nenhum chama o “close()”…

Apague essas variáveis de instância e utilize variáveis locais.

1 curtida

Não funcionou!

Então só vendo todo o seu código pra descobrir onde você está “matando” a conexão.