For input String: ""

Bom dia, estou fazendo uma tela básica para pesquisa de Ordem de Serviço, porém na hora que clico para executar, ele dá a exceção de For input String: “”, pensei varias vezes no que poderia ser mas não me vem na cabeça o que seja.

Clique do botão pesquisar:

        try {

            OrdemServico c = new OrdemServico();
            NegocioOrdemServico dados = new NegocioOrdemServico();
            c.setCod_os(Integer.parseInt(jTextFieldCodOSPesquisa.getText()));
            this.ordser = dados.listar(c);
            DefaultTableModel modelo = new DefaultTableModel();
            String[] colunasDaTabela = {"Código", "Data da Emissão", "Veículo", "Serviço"};
            modelo.setColumnIdentifiers(colunasDaTabela);
            for (OrdemServico cl : ordser) {
                Object[] linhas = {cl.getCod_os(), cl.getData_emissao(), cl.getVeiculo().getPlaca().trim(), cl.getServico()};
                modelo.addRow(linhas);

            }

            jTable1.setModel(modelo);


        } catch (Exception ex) {
            JOptionPane.showMessageDialog(rootPane, ex.getMessage());
        }
    }                                               

Meus métodos para pode realizar o listamento:
Validações dos dados que podem ser enviados:

@Override
    public ArrayList<OrdemServico> listar(OrdemServico filtro) throws Exception {
        if (filtro.getVeiculo().getPlaca().trim().length() > 7) {
            throw new Exception("Por favor, informe uma placa válida");
        }
        if (filtro.getVeiculo().getPlaca() == null) {
            throw new Exception("Informe uma placa válida");
        }
        if (filtro.getVeiculo().getPlaca().trim().length() <= 0) {
            throw new Exception("Informe uma placa válida");
        }
        return dados.listar(filtro);
    }

Comando para o Banco de Dados:

    @Override
    public ArrayList<OrdemServico> listar(OrdemServico filtro) throws Exception {
        int pos = 1;
        ArrayList<OrdemServico> retorno = new ArrayList<>();
        String sql = " SELECT os.cod_os, os.data_emissao, os.placa, os.servico FROM OrdemServico AS os ";

        if (filtro.getCod_os() != 0) {
            sql += " WHERE cod_os = ? ";
        }
        if (filtro.getVeiculo().getPlaca().trim().length() > 6) {
            sql += " WHERE os.placa LIKE ? ";
        }

        PreparedStatement preparedStatement = super.conectar().prepareStatement(sql);

        if (filtro.getCod_os() != 0) {
            preparedStatement.setInt(pos, filtro.getCod_os());
            pos++;
        }
        if (filtro.getVeiculo().getPlaca().trim().length() > 6) {
            preparedStatement.setString(pos, filtro.getVeiculo().getPlaca());
            pos++;
        }
        ResultSet rs = preparedStatement.executeQuery();
        while (rs.next()) {
            OrdemServico os = new OrdemServico();
            os.setCod_os(rs.getInt("cod_os"));
            os.setData_emissao(rs.getDate("data_emissao"));
            os.getVeiculo().setPlaca(rs.getString("placa"));
            os.setServico(rs.getString("servico"));
            retorno.add(os);

        }
        return retorno;
    }

provavelmente está tentando converter a String “” para um número, verifique seu parse na linha onde ele apontou o erro.

Você está tentando converter o conteúdo deste JTextField em um inteiro, porém, ele está vazio (""), por isso a exceção.

Por que quero quando ele faça o clique sem nenhum dado informado, possa mostrar todas as OSs cadastradas, qual a melhor forma para que eu possa corrigir esse problema ?

Qual a melhor que eu posso consertar esse problema ?

        if (jTextFieldCodOSPesquisa.getText().trim() == null) {
            c.setCod_os(0);
        } else {
            c.setCod_os(Integer.parseInt(jTextFieldCodOSPesquisa.getText()));
        }

ainda dá o mesmo problema, creio que eu esteja fazendo de maneira errada, qual seria a melhor forma?

Então tira essa conversão, captura isso numa String, valida se é diferente de “” e daí converte, caso seja.

1 curtida
        String validar = jTextFieldCodOSPesquisa.getText();
        if (validar.equals("") == true){
            c.setCod_os(0);
        } else {
            c.setCod_os(Integer.parseInt(jTextFieldCodOSPesquisa.getText()));
        }

Fiz assim, funcionou, Vlw!

Esse IF não tem lógica por vários motivos:

  1. TextFields não retornam null, no máximo vazio
  2. Se sua String fosse null, já daria nullPointer no método trim()
  3. O trim só elimina espaços vazios no início e no final da String então só faz sentido testar se depois do trim a String não é vazia.

Caso o textField aceita não apenas números inteiros(como virgula, ponto e LETRAS), recomendo tentar o parse com try/catch e se der erro vc usa 0, pq o usuário ainda poderia digital um valor inválido.

1 curtida

try {
c.setCod(Integer.parseInt(jTextField.getText()));
} catch (NumberFormatException nbe) {
c.setCod(0);
}

desta forma ?

Pode ser, ou usa apenas:
catch (Exception ex)
pra capturar qualquer erro.