Ir ao conteúdo

Posts recomendados

Postado

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)

 

Postado

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?

Postado

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());
            }

 

Postado

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?

Postado

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.

Postado

@leonardo0308

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

deve ser assim que ficaria o update

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!