Erro: muito tempo logado

Boa noite, estou com um problema sério em meu programa, eu criei um BD no MySQL server, e compartilhei ele na internet, assim outros usuários possuem acesso à um banco em comumn, formando uma rede.

Porém, ao ficarem logados por muito tempo esta havendo um problema de conexão, e cai o Servidor de banco de dados, nao sei porque, mas testei as opções do meu programa, até descobrir qual era a interface grafica que estava causando a queda do branco, era a interface de inserção de uma peça de computador no BD a seguir é o código lógico que valida a inserção:

 public void inserePeça(Admin.Admin_Inserir_Peça frame)
    {
        String tabela=null;
        String nome;
        String tipo="";
        String descricao;
        String imagem;
        String nota;
        String preco;
        Banco.Comandos_BD insere=new Banco.Comandos_BD();
        if(frame.AreaTexto_nome.getText().equals("") ||
           frame.AreaTexto_descricao.getText().equals("") ||
           frame.AreaTexto_imagem.getText().equals("") ||
           frame.AreaTexto_preco.getText().equals(""))
        {
            if(frame.AreaTexto_nome.getText().equals(""))
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                        "Preencher: Nome da Peça",
                        "Erro - Preenchimento Obrigatório",
                        javax.swing.JOptionPane.WARNING_MESSAGE);
            }
            if(frame.AreaTexto_descricao.getText().equals(""))
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                        "Preencher: Descrição",
                        "Erro - Preenchimento Obrigatório",
                        javax.swing.JOptionPane.WARNING_MESSAGE);
            }
            if(frame.AreaTexto_imagem.getText().equals(""))
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                        "Preencher: Imagem",
                        "Erro - Preenchimento Obrigatório",
                         javax.swing.JOptionPane.WARNING_MESSAGE);
            }
            if(frame.AreaTexto_preco.getText().equals(""))
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                        "Preencher: Preço",
                        "Erro - Preenchimento Obrigatório",
                         javax.swing.JOptionPane.WARNING_MESSAGE);
            }
        }
        else
        {

            // <editor-fold defaultstate="collapsed" desc="Opção: Placa Mãe">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Placa Mãe"))
            {
                tabela="pecas_placas_mae";
                tipo=(String)frame.ComboBox_tipo.getSelectedItem();
            }
            // </editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: Placa de Vídeo">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Placa de Vídeo"))
            {
                tabela="pecas_placas_video";
            }
            //</editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: Processador">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Processador"))
            {
                tabela="pecas_processadores";
            }
            //</editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: Memória">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Memória"))
            {
                tabela="pecas_memorias";
            }
            //</editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: HD">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("HD"))
            {
                tabela="pecas_hds";
            }
            // </editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: Fonte">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Fonte"))
            {
                tabela="pecas_fontes";
            }
            //</editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: Monitor">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Monitor"))
            {
                tabela="pecas_adicionais_monitores";
            }
            //</editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: Impressora">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Impressora"))
            {
                tabela="pecas_adicionais_impressoras";
            }
            //</editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: Mouse">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Mouse"))
            {
                tabela="pecas_adicionais_mouses";
            }
            // </editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: Teclado">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Teclado"))
            {
                tabela="pecas_adicionais_teclados";
            }
            // </editor-fold>

            // <editor-fold defaultstate="collapsed" desc="Opção: Som">
            if(frame.ComboBox_nometabela.getSelectedItem().equals("Som"))
            {
                tabela="pecas_adicionais_sons";
            }
        // </editor-fold>

            nome=frame.AreaTexto_nome.getText();
            descricao=frame.AreaTexto_descricao.getText();
            imagem=frame.AreaTexto_imagem.getText();
            nota=(String)frame.ComboBox_nota.getSelectedItem();
            preco=String.valueOf(frame.AreaTexto_preco.getText());
            try
            {
                if(insere.inserePeça(tabela,nome,tipo,descricao,imagem,Integer.parseInt(nota),Integer.parseInt(preco))==true)
                {
                    insere.atualizaProdução(Admin.Admin_Menu.login);
                    javax.swing.JOptionPane.showMessageDialog(null,
                            "Dados inseridos com sucesso!"
                          + "\nPeça: "+nome,
                            "Sucesso!",
                             javax.swing.JOptionPane.INFORMATION_MESSAGE);
                    frame.frame_anterior.setVisible(true);
                    frame.dispose();
                }
                else
                {
                    javax.swing.JOptionPane.showMessageDialog(null,
                            "Preço: Número Incorreto"
                           +"\nErro - Deve Preencher Somente Com Inteiros!",
                            "Erro",
                             javax.swing.JOptionPane.ERROR_MESSAGE);
                }
            }
            catch(Exception e)
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                            "Preço: Número Incorreto"
                           +"\nErro - Deve Preencher Somente Com Inteiros!",
                            "Erro",
                             javax.swing.JOptionPane.ERROR_MESSAGE);
            }
        }
        
    }

Após a execução desse código, é possível executá-lo denovo, e denovo, da certo, porém, se o usuário deixar o programa aberto após executar esse código pelo menos uma vez, caí a conexão do banco, cai a conexão do próprio servidor(que é meu PC - temporariamente).

Alguém tem idéia do que pode ser? Por Favor preciso muito da ajuda de vocês, obrigado!

Guilherme boa noite, possivelmente o seu problema esteja relacionado a parte em que é realizada as operações no banco de dados, sendo assim, é interessante voce postar a classe que realiza essas tarefas pois o problema possivelmente estará lá, e fica mais fácil de tentar ajuda-lo ! Se puder postar ai a classe de inserção do item em questão e a classe de conexão com o banco facilita, apenas tenha cuidado e edite a linha de endereço real do seu servidor para não expor para todos.

Olá,

Provavelmente você não está fechando as conexões que está abrindo. Abra a conexão, faça o que precisar depois libere os recursos que a usarem e feche-a.

[]'s

Aqui vai um pouco do código, porém quando eu tento dar um close() em cada conexão feita, eu nao consigo kais realizar a conexão em nenhuma outra parte, fica NULL

public boolean inserePeça(String nome_tabela,String nome,String tipo,String descricao,String imagem,int nota,int preco)
    {
        boolean inserido=false;
        if(nome_tabela.equals("pecas_placas_mae"))
        {
            PreparedStatement insere;
            String comando = "INSERT INTO "+nome_tabela+"(nome,tipo,descricao,imagem,preco,nota)"
                           + "VALUES(?,?,?,?,?,?)";
            Conecta_BD.carregarDriver();
            Connection conn=Conecta_BD.carregarServidor();
            try
            {
                insere=conn.prepareStatement(comando);
                insere.setString(1, nome);
                insere.setString(2, tipo);
                insere.setString(3, descricao);
                insere.setString(4, imagem);
                insere.setInt(5, preco);
                insere.setInt(6, nota);
                insere.executeUpdate();
                insere.close();
                inserido=true;
            }
            catch(Exception e)
            {
                System.out.println(e.getMessage());
                inserido=false;
            }
        }
        else
        {
            PreparedStatement insere;
            String comando = "INSERT INTO "+nome_tabela+"(nome,descricao,imagem,preco,nota)"
                           + "VALUES(?,?,?,?,?)";
            Conecta_BD.carregarDriver();
            Connection conn=Conecta_BD.carregarServidor();
            try
            {
                insere=conn.prepareStatement(comando);
                insere.setString(1, nome);
                insere.setString(2, descricao);
                insere.setString(3, imagem);
                insere.setInt(4, preco);
                insere.setInt(5, nota);
                insere.executeUpdate();
                insere.close();
                inserido=true;
            }
            catch(Exception e)
            {
                System.out.println(e.getMessage());
                inserido=false;
            }
        }
        return inserido;
    }

Aqui vai o código que pega os parametros(url, host, senha) e cria a conexão:

  // <editor-fold defaultstate="collapsed" desc="Carrega: Driver">
    public static void carregarDriver()
    {
        Properties properties = new Properties();

	try
        {
            properties.load(Conecta_BD.class.getResourceAsStream("Propriedades_BD.properties"));
	} 
        catch (IOException e)
        {
            System.out.println("Erro: Properties");
	}

        servidor = properties.getProperty("servidor");
        driver = properties.getProperty("driver");
	admin = properties.getProperty("admin");
	senha = properties.getProperty("senha");

	try
        {
            Class.forName(driver);
	} 
        catch (ClassNotFoundException e)
        {
            System.out.println("Erro ao carregar driver");
	}
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Carrega: Servidor">
    public static Connection carregarServidor()
    {
        try
        {
            /* Efetua a conexão com o bando de dados. */
            if (conn == null)
            {
                conn = DriverManager.getConnection(servidor,admin,senha);
            }
	} 
        catch (SQLException e)
        {
            System.out.println("Erro com conexão: "+e.getCause());
	}
	return conn;
    }
    // </editor-fold>

Guilherme eu acho que o ideal é voce procurar um exemplo de conexao ao banco singleton que irá garantir que voce tenha apenas uma conexao de banco aberta no seu sistema, e bem simples mas no momento nao tenho um exemplo para passar para voce mas deve ser facil de achar no google. Lembrando que Singleton e um design pattern bem difundido.