Erro a salvar informações no banco

Senhores, sou muito leigo em programação, mas estou tentando fazer algo aqui para meu trabalho, porém estou com dificuldades para encontrar o problema. A princípio o código está todo ok e a conexão com o banco também, mas no momento que coloco os dados e tento salvar recebo o erro " For input string:"" ".
Estou usando o Netbeans IDE 8.2 e o MySQL.

Estrutura do banco:

id int(11) PK
selecao varchar(45)
cargo varchar(45)
nome varchar(45)
motivo varchar(45)
n_dias int(11)
data_inicio varchar(45)
destino varchar(240)
tel varchar(45)

EntradaDAO:

public void inserir(Entrada entrada) {

    String sql = "INSERT INTO ENTRADA (selecao, posto_graduacao, nome_de_guerra, motivo, n_dias, data_inicio, destino, tel) VALUES (?,?,?,?,?,?,?,?)";
    
    try
    {
        if(this.conexao.conectar())
        {             
            try (
                    PreparedStatement ps = this.conexao.getConnection().prepareStatement(sql)) {
                
                ps.setString(1, entrada.getSelecao());
                ps.setString(2, entrada.getCargo());
                ps.setString(3, entrada.getNome());
                ps.setString(4, entrada.getMotivo());
                ps.setInt(5, entrada.getN_dias());
                ps.setString(6, entrada.getData_inicio());
                ps.setString(7, entrada.getDestino());
                ps.setString(8, entrada.getTel());
                ps.execute(); 
               
            }
            this.conexao.getConnection().close(); 
        }
    }
    catch(SQLException ex)
    {
       throw new RuntimeException(ex);
    }
}

Código do botão salvar:

try
{
Entrada entrada = new Entrada();
entrada.setId(Integer.parseInt(campoId.getText()));
entrada.setSelecao((String) campoSelecao.getSelectedItem());
entrada.setCargo((String) campoCargo.getSelectedItem());
entrada.setNome(campoNome.getText());
entrada.setMotivo((String) campoMotivo.getSelectedItem());
entrada.setN_dias(Integer.parseInt(campoN_dias.getText()));
entrada.setData_inicio(campoData_inicio.getText());
entrada.setDestino(campoDestino.getText());
entrada.setTel(campoTel.getText());

        EntradaDAO entradaDao = new EntradaDAO();
        
        if(entrada.getId() == 0)
        {
            entradaDao.inserir(entrada);
            JOptionPane.showMessageDialog(null, "Cadastro salva com sucesso!", "", INFORMATION_MESSAGE);
        }
        else
        {
            entradaDao.alterar(entrada);
            JOptionPane.showMessageDialog(null, "Cadastro alterado com sucesso!", "", INFORMATION_MESSAGE);
        }
        
        limparDesabilitarCampos(); 
        botaoSalvar.setEnabled(false);
        
        atualizaTabela(entradaDao);
        
    }
    catch(HeadlessException | NumberFormatException ex)
    {
        JOptionPane.showMessageDialog(null, "Ocorreu um erro inesperado:\n" + ex.getMessage(), "ERRO!", ERROR_MESSAGE);
    }
    
}                                           

OBS: entrada.setSelecao((String) campoSelecao.getSelectedItem());
entrada.setCargo((String) campoCargo.getSelectedItem());
entrada.setMotivo((String) campoMotivo.getSelectedItem());

Esses são JComboBox

Se puderem me ajudar nessa empreitada vou ficar muito grato. Três semanas já quebrando a cabeça.

Amigo, coloca um break point nesse método “inserir”. Quando entrar nele, passe o mouse sobre a variável que você tem que passar como parâmetro. “entrada”. Verifique se os campos dela estão todos preenchidos. Provavelmente algum deles está vazio.

Como assim?

Segue minha conexão com o banco:

package utils;

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

public class ConexaoBanco {

private String servidor;
private String banco;
private String usuario;
private String senha;
private Connection conexao;

public ConexaoBanco()
{
    this.servidor = "localhost";
    this.banco = "livro";
    this.usuario = "root";
    this.senha = "xxxxxxxx";
}

public boolean conectar(){
    try
    {
        this.conexao = DriverManager.getConnection("jdbc:mysql://"+this.servidor+"/"+this.banco,this.usuario,this.senha);
        return true;
    }
    catch(SQLException ex){
        throw new RuntimeException(ex);
    }
}

public Connection getConnection() {
    return conexao;
}

}

  1. No seu Netbeans, dentro da classe EntradaDAO, clique no número da linha (localizada do lado esquerdo) desse seu PreparedStatement.
  2. Depure o projeto (Ctrl+F5).
  3. Insira um objeto do tipo Entrada no seu programa.
  4. Quando voltar para o netbeans, vai ver que ele vai estar parado na linha selecionada.
  5. Passe o mouse em cima da palavra “entrada” na linha: “public void inserir(Entrada entrada) {”.
  6. Quando passar vai abrir uma especie de “comentario” em cima da palavra.
  7. Clique no “+” a esquerda desse comentario.
  8. Você vai ver todas as variáveis desse objeto (selecao, cargo, nome, motivo…).
  9. Todas estão preenchidas e com valores? Alguma está com valor vazio?

Segue minha classe Entrada

public class Entrada {
private int id;
private String selecao;
private String cargo;
private String nome;
private String motivo;
private int n_dias;
private String data_inicio;
private String destino;
private String tel;

public Entrada() {
}

public Entrada(String selecao, String posto_graduacao, String nome_de_guerra, String motivo, int n_dias, String data_inicio, String destino, String tel) {
    this.selecao = selecao;
    this.cargo = cargo;
    this.nome = nome;
    this.motivo = motivo;
    this.n_dias = n_dias;
    this.data_inicio = data_inicio;
    this.destino = destino;
    this.tel = tel;
}

public Entrada(int id, String selecao, String cargo, String nome, String motivo, int n_dias, String data_inicio, String destino, String tel) {
    this.id = id;
    this.cargo = cargo;
    this.nome = nome;
    this.motivo = motivo;
    this.n_dias = n_dias;
    this.data_inicio = data_inicio;
    this.destino = destino;
    this.tel = tel;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getSelecao() {
    return selecao;
}

public void setSelecao(String selecao) {
    this.selecao = selecao;
}

public String getCargo() {
    return cargo;
}

public void setCargo(String cargo) {
    this.cargo = cargo;
}

public String getNome() {
    return nome;
}

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

public String getMotivo() {
    return motivo;
}

public void setMotivo(String motivo) {
    this.motivo = motivo;
}

public int getN_dias() {
    return n_dias;
}

public void setN_dias(int n_dias) {
    this.n_dias = n_dias;
}

public String getData_inicio() {
    return data_inicio;
}

public void setData_inicio(String data_inicio) {
    this.data_inicio = data_inicio;
}

public String getDestino() {
    return destino;
}

public void setDestino(String destino) {
    this.destino = destino;
}

public String getTel() {
    return tel;
}

public void setTel(String tel) {
    this.tel = tel;
}

}

Esse video vai te dar uma ideia do que é o breakpoint.
No caso, você vai fazer ele na sua classe EntradaDAO.

Cliquei na linha, ela ficou em vermelho e depois apertei Cttrl+F5, em seguida abriu a minha tela para inserir os dados, mas coloco as informações e ocorre o mesmo erro.
O passo 3 que vc pediu é para preencher com as informações de entrada, correto?
Mas ainda está depurando.

Isso…você coloca os dados e o netbeans vai parar na linha que você marcou de vermelhor (ela vai ficar verde e com uma setinha.) Aí você vai estar no passo 5.

Assisti o vídeo, mas ainda sim não consigo achar o problema. Eu acho que são as três JComboBox.

Chegou a parar no 5º passo?

Sim

E quando passou o mouse na variável, estava tudo preenchido? Não tinha nenhum valor “”?

Entrada entrada = new Entrada();
entrada.setId(Integer.parseInt(campoId.getText()));
entrada.setSelecao((String) campoSelecao.getSelectedItem());
entrada.setPosto_graduacao((String) campoPosto_graduacao.getSelectedItem());
entrada.setNome_de_guerra(campoNome_de_guerra.getText());
entrada.setMotivo((String) campoMotivo.getSelectedItem());
entrada.setN_dias(Integer.parseInt(campoN_dias.getText()));
entrada.setData_inicio(campoData_inicio.getText());
entrada.setDestino(campoDestino.getText());
entrada.setTel(campoTel.getText());

para na primeira linha com a cor verde

Ocorrência de ponto de interrupção do método em gui.LivroGUI,{MethodName} na linha 392 pelo thread AWT-EventQueue-0.

private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {
try
{
Entrada entrada = new Entrada();
entrada.setId(Integer.parseInt(campoId.getText()));
entrada.setSelecao((String) campoSelecao.getSelectedItem());
entrada.setCargo((String) campoCargo.getSelectedItem());
entrada.setNome(campoNome.getText());
entrada.setMotivo((String) campoMotivo.getSelectedItem());
entrada.setN_dias(Integer.parseInt(campoN_dias.getText()));
entrada.setData_inicio(campoData_inicio.getText());
entrada.setDestino(campoDestino.getText());
entrada.setTel(campoTel.getText());

        EntradaDAO entradaDao = new EntradaDAO();
        
        if(entrada.getId() == 0)
        {
            entradaDao.inserir(entrada);
            JOptionPane.showMessageDialog(null, "Cadastro salvo com sucesso!", "", INFORMATION_MESSAGE);
        }
        else
        {
            entradaDao.alterar(entrada);
            JOptionPane.showMessageDialog(null, "Cadastro alterado com sucesso!", "", INFORMATION_MESSAGE);
        }
                                            
    }
    catch(HeadlessException | NumberFormatException ex)
    {
        JOptionPane.showMessageDialog(null, "Ocorreu um erro inesperado:\n" + ex.getMessage(), "ERRO!", ERROR_MESSAGE);
    }
    
}

Agora aperta F8, até chegar na linha “entradaDao.inserir(entrada);”
Aí você passa o mouse em cima da palavra "entrada’ que está nos parêntesis. Verifica se está vazia ou não.

A questão, é que você precisa descobrir ONDE está dando o erro, o debug te dá essa oportunidade.

Minhas JComboBox estão assim:

    this.campoSelecao.addItem("Início");
    this.campoSelecao.addItem("Término");
    this.campoSelecao.addItem("Saída da Guarnição");
    
    this.campoCargo.addItem("Gerente");
    this.campoCargo.addItem("Auxiliar");
    this.campoCargo.addItem("Fiscal");

    this.campoMotivo.addItem("Instalação");
    this.campoMotivo.addItem("Cursos diversos");
    this.campoMotivo.addItem("Núpcias");

MethodBreakpoint [gui.LivroGUI].botaoSalvarActionPerformed ‘(Ljava/awt/event/ActionEvent;)V’ enviado com êxito.
Não foi possível submeter o ponto de interrupção MethodBreakpoint [dao.EntradaDAO].inserir ‘(Lmodel/Entrada;)V’, motivo: O método ‘inserir’ com assinatura ‘(Lmodel/Entrada;)V’ não existe na classe dao.EntradaDAO.