Ir ao conteúdo
  • Cadastre-se
Francisco Angelini

Java Erro no Update do produto

Recommended Posts

Bom dia, então eu estou fazendo um projeto que faz uma requisição em um site e retorna o valor dos novos impostos entre outras coisas, a parte do select e enviar a requisição está tudo ok, porém a parte introduzir o valor no banco não muito, o update está desta forma:

public void alterarImposto() throws SQLException {
        Retorno retorno = new Retorno();

        int nacional =  Integer.parseInt(retorno.getNacional());
        int importado = Integer.parseInt(retorno.getImportado());
        int estadual =  Integer.parseInt(retorno.getEstadual());
        int municipal = Integer.parseInt(retorno.getMunicipal());
        int codigo = Integer.parseInt(retorno.getCodigo());
        try {
            ps = conexao
                    .prepareStatement("UPDATE TABELAIBTP "
                            + "SET ALIQNAC = ?, ALIQIMP = ?, ALIQESTADUAL = ?, ALIQMUNICIPAL = ? "
                            + "WHERE CODIGONCM = ?");

            ps.setInt(1, nacional);
            ps.setInt(2, importado);
            ps.setInt(3, estadual);
            ps.setInt(4, municipal);
            ps.setInt(5, codigo);

            ps.executeUpdate();
        } catch (SQLException ex) {
            throw new SQLException("Erro alterarImposto: " + ex.getMessage());
        }
    }

Os campos ALIQNAC, ALIQIMP, ALIQESTADUAL e ALIQMUNICIPAL são do tipo Numeric

E o metodo main está desta forma:

public static void main(String[] args) throws SQLException {
        NcmDAO ncmD = new NcmDAO();
        int codigo = 0;

        for (ncmMOD ncm : ncmD.carregarTeste()) {
            if (!"".equals(ncm.getCodigo())) {
                codigo = Integer.parseInt(ncm.getCodigo());

            }
            if (codigo < 9999999) {
                ncm.setCodigo("0" + ncm.getCodigo());
            }
            
            Client client = ClientBuilder.newClient();
            Response response = client.target("https://apidoni.ibpt.org.br/api/v1/produtos?"
                    + "token=" + ncm.getToken()
                    + "&cnpj=" + ncm.getCnpj()
                    + "&codigo=" + ncm.getCodigo()
                    + "&uf=" + ncm.getUF()
                    + "&ex=" + ncm.getEX()
                    + "&descricao=" + ncm.getDescricao()
                    + "&unidadeMedida=" + ncm.getUnidadeMedida()
                    + "&valor=" + ncm.getValor()
                    + "&gtin=" + ncm.getGtin())
                    .request(MediaType.APPLICATION_JSON)
                    .get();

            String s = response.readEntity(String.class);

            Gson gson = new GsonBuilder().create();
            Type collectionType = new TypeToken<Retorno>() {
            }.getType();

            Retorno r = gson.fromJson(s, collectionType);
           
            ncmD.alterarImposto();
            System.out.println("Imposto auterado com sucesso");
            System.out.println("-------------------------------------------------------------------------");
            
            
        }

    }

O Erro fica assim:

Exception in thread "main" java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:542)
    at java.lang.Integer.parseInt(Integer.java:615)
    at dao.NcmDAO.alterarImposto(NcmDAO.java:55)
    at com.softcom.produtoncm.Teste.main(Teste.java:52)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu setCodigo() ta como String, porque no banco o campo codigo ele ta como String, ai não tem como eu retornar um valor inteiro em um getCodigo() String, tem ncm (codigo de produto) que tem um 0 antes da primeira casa decimal, por isso que eu coloquei este 0 pois o ncm 1234567 na verdade teria que ser 01234567, entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, é que pela mensagem de erro, ele ta dando problema em alguma conversão do Integer.parseInt(), ai eu achei que poderia ter algumas coisa haver com essa parte do código.

if (!"".equals(ncm.getCodigo())) {
                codigo = Integer.parseInt(ncm.getCodigo());

            }
            if (codigo < 9999999) {
                ncm.setCodigo("0" + ncm.getCodigo());
            }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu tiro o alterarImposto() ele funciona normalmente, pega os dados, faz a requisição e exibe o que retornou do site, porém quando eu envio pro banco da esse erro

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum, entendi. Me tira uma duvida nessa parte do código

int nacional =  Integer.parseInt(retorno.getNacional());
int importado = Integer.parseInt(retorno.getImportado());
int estadual =  Integer.parseInt(retorno.getEstadual());
int municipal = Integer.parseInt(retorno.getMunicipal());
int codigo = Integer.parseInt(retorno.getCodigo());

na classe retorno o nacional, importado, estadual e municipal estão como String também?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim ela retorna uma String do valor da requisição do site, porém acho que eu achei o erro, fiz um select no banco o primeiro valor que retorna é uma String com o valor " " (no caso é um espaço). vou ter que fazer uma alteração no update.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@leonardo0308

"update tabelaibtp "
                            + "set aliqnac = ?, aliqimp = ?, aliqestadual = ?, aliqmunicipal = ? "
                            + "where codigoncm = ? and clafis is not null and clafis <> ' ' "; 

deve ser assim que ficaria o update

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×