Ontem algumas pessoas tentaram me ajudar com um problema que estava tendo no meu DAO quando estava tentando converter de String para int.
Na hora q vou fazer a inserção, não estou conseguindo fazer a conversão.
Segue o código DAO:
//Insere os PDV´s na tabela tblDEALER_FUSAOStringsquery=" INSERT INTO tblDEALER_FUSAO"+" (nidregiao,sidagentevenda,pdv_filho) "+" VALUES (?,?,?)";pstm=con.prepareStatement(squery);if(pdvFusaoForm.getRegiao().equals("")||pdvFusaoForm.getRegiao()==null){pstm.setInt(1,0);}else{pstm.setInt(1,Integer.parseInt(pdvFusaoForm.getRegiao()));}if(pdvFusaoForm.getCodPDVFilho().equals("")||pdvFusaoForm.getCodPDVFilho()==null){pstm.setInt(2,0);}else{pstm.setInt(2,Integer.parseInt(pdvFusaoForm.getCodPDVFilho()));}if(pdvFusaoForm.getCodPDVPai().equals("")||pdvFusaoForm.getCodPDVPai()==null){pstm.setInt(3,Integer.parseInt(pdvFusaoForm.getCodPDVPai()));}else{pstm.setInt(3,Integer.parseInt(pdvFusaoForm.getCodPDVPai()));}System.out.println("squery: "+squery);System.out.println("Regiao: "+pdvFusaoForm.getRegiao());System.out.println("Filho: "+pdvFusaoForm.getCodPDVFilho());System.out.println("Pai: "+pdvFusaoForm.getCodPDVPai());linhas=pstm.executeUpdate();System.out.println("Inseriu "+linhas+" linha.");
A mensagem de erro é essa: Exception: java.lang.NumberFormatException: For input string: “”
Não sei nem mais o q faço.
Obrigado
fiaux
Pô cara, não me leva a mal, mas tem que aprender a interpretar as mensagens de erro. Procurar por ela, pela exception. A string de entrada veio vazia, não dá para ele parsear isso e levanta a exception.
fiaux
Aqui ó
public class NumberFormatException
extends IllegalArgumentException
Thrown to indicate that the application has attempted to convert a string to one of the numeric types, but that the string does not have the appropriate format.
edilson_x
Existe um erro na sua validação, vc tem que verificar antes se o objeto é null para depois verificar se é equals("").
e no trecho acima vc esta convertendo mesmo se vier vazio
fabiozoroastro
Vítor, seja mais específico na hora de fazer seus posts. O fiaux já poderia ter resolvido seu problema, caso você tivesse postado a exception e a linha que ocorre o erro.
Outra coisa é que o título do post não tem nexo nenhum com seu código. Vale a pena alterar. Abraço.
e-cowboy
Velhinho é o seguinte, vi seu código e tem 2 coisas que precisa mudar!
1º - Você está testando se o valor da String antes de verificar se ela é nula, você deve primeiro verificar se ela não é nula e então verificar o seu valor,ou seja inverta o if, primeiro faça …==null || …equals()…, senão você pode receber um NullPointerException por tentar chamar o método equals de um objeto null.
2º O erro de conversão está no terceiro if, tanto no if quanto no else vc usa o parseInt, e pelo que entendi se ele cair no if não deve ser feito o parser, você vai atribuir um valor arbitrário correto! Verifique isso, coloque no if um valor fixo como fez nos outros e no else deixe o parses que deve funcionar!
Me desculpe pelas mensagens, ainda estou começando com Struts e Java, por isso que as vezes faço algumas perguntas idiotas.
Mas vou seguir os conselhos de vcs. Vou fazer a alteração sugerida por vcs e dou um feedback pra vcs.
Desde já agradeço,
Vitor
fiaux
Acho que não é questão de pergunta idiota. É questão de você buscar outros caminhos antes do fórum. Questão de aprender a ler o stacktrace, afinal de contas, vai ter que fazer isso todo dia que aparecer um erro. Foi apenas um toque, para ir se acostumando com as situações problemáticas, aprender a ser virar sozinho. Sacou?
fabiozoroastro
Oi Vítor, eu não respondi o tópico para criticar, mas é bom tomar cuidado com os posts que fará, pq as vezes você pode estar sendo ajudado por alguém de uma empresa que vc vá fazer entrevista amanhã, e vc precisa saber fazer as perguntas certas para suas dúvidas para não ser excluído de um processo de seleção por um descuido. LEMBRANDO que se está com dúvida, poste mesmo, só fique mais atento.
Ps.: Minha opinião tah? Abraço…
V
vitorbonfim
Galera,
Acho melhor deixar pra lá, não consegui resolver o problema, continua dando o mesmo erro e ainda não consegui sair do lugar.
Já entendi q a String esta vindo nula, e q estou tentando converter uma String nula para int, mas infelizmente não consigo resolver o problema.
Já fiz as mudanças sugeridas por vcs, mas acho q vou jogar a toalha.
Agradeço a ajuda de todos,
Vitor
fiaux
No way. Vai desistir assim tão fácil?
Mesmo problema ainda?
V
vitorbonfim
Bem, não queria desistir não. Mas tá brabo.
Aliás, nem posso desistir, tenho q entregar o projeto pronto e estou “muito” atrasado.
Se ainda tiverem paciência para me ajudar, aceito a ajuda. rs
Faça isso para todas as condições. Veja que seu último if está com problema. Na condição de TRUE e FALSE, vc faz a mesma coisa.
V
vitorbonfim
O mesmo problema.
Agora fiz assim:
//Insere os PDV´s na tabela tblDEALER_FUSAOStringsquery=" INSERT INTO tblDEALER_FUSAO"+" (nidregiao,sidagentevenda,pdv_filho) "+" VALUES (?,?,?)";pstm=con.prepareStatement(squery);System.out.println("squery: "+squery);System.out.println("Regiao: "+pdvFusaoForm.getRegiao());System.out.println("Filho: "+pdvFusaoForm.getCodPDVFilho());System.out.println("Pai: "+pdvFusaoForm.getCodPDVPai());if(pdvFusaoForm.getRegiao()==null||pdvFusaoForm.getRegiao().equals("")){pstm.setInt(1,0);}else{pstm.setInt(1,Integer.parseInt(pdvFusaoForm.getRegiao()));}if(pdvFusaoForm.getCodPDVFilho()==null||pdvFusaoForm.getCodPDVFilho().equals("")){pstm.setInt(2,0);}else{pstm.setInt(2,Integer.parseInt(pdvFusaoForm.getCodPDVFilho()));}if(pdvFusaoForm.getCodPDVPai()==null||pdvFusaoForm.getCodPDVPai().equals("")){pstm.setInt(3,0);}else{pstm.setInt(3,Integer.parseInt(pdvFusaoForm.getCodPDVPai()));}linhas=pstm.executeUpdate();System.out.println("Inseriu "+linhas+" linha.");
Erro: Exception: java.lang.NumberFormatException: For input string: “”
Quando ele vem vazio, seto o valor zero para ele, justamente para não dar mais esse erro, mas acho q não foi a melhor solução.
Vc tem alguma outra sugestão.
Obrigado,
Vitor
fabiozoroastro
Nos seus System.out.println, o que é exibido? posta aew.
fiaux
Experimenta o que o fabiozoroastro falou. Usa o debug para tentar entender.
E sim, posta o sysout.
V
vitorbonfim
Fabio,
Fiz aquela mudança que vc pediu e deu a seguinte exceção: sqlException: java.sql.SQLException: ORA-01008: not all variables bound
Vc tem alguma sugestão para esse problema?
Obrigado
V
vitorbonfim
Resultado dos System.out
squery: INSERT INTO tblDEALER_FUSAO (nidregiao,sidagentevenda,pdv_filho) VALUES (?,?,?)
Regiao: 1
Filho: 20402
Pai: 32000
sqlException: java.sql.SQLException: ORA-01008: not all variables bound
CadPDVFusaoDAO: Fechando conexão.
V
vitorbonfim
Senhores,
Vcs preferem q eu dê um post de todo o método?
Acho q vai ajudar vcs a me ajudar.
Fabio, fiz daquelas duas maneiras que vc falou, mas deu aquele exception q postei na mensagem anterior.
DAO:
publicbooleanassociar(CadPDVFusaoFormpdvFusaoForm)throwsIOException{try{System.out.println("CadPDVFusaoDAO: Entrou CadPDVFusaoDAO Associar.");System.out.println(Utilitario.USUARIO);System.out.println(getUtilitarioDAO().getdataHora());System.out.println("CadPDVFusaoDAO: Antes da conexao.");Connectioncon=getConnection();intlinhas=0;//Exclui os PDV´s da Tabela tblDEALER_FUSAO/*pstm = con.prepareStatement(" DELETE FROM tblDEALER_FUSAO " + " WHERE nidaregiao = '" + pdvFusaoForm.getRegiao() + "'" + " AND pdv_filho = '" + pdvFusaoForm.getCodPDVFilho() + "'" + " AND sidagentevenda = '" + pdvFusaoForm.getCodPDVPai() + "'");*/Stringsql=" DELETE FROM tblDEALER_FUSAO "+" WHERE nidregiao = '"+pdvFusaoForm.getRegiao()+"'"+" AND pdv_filho = '"+pdvFusaoForm.getCodPDVFilho()+"'"+" AND sidagentevenda = '"+pdvFusaoForm.getCodPDVPai()+"'";System.out.println("CadPDVFusaoDAO: Antes da query de Exclusão");pstm=con.prepareStatement(sql);System.out.println("SQL: "+sql);System.out.println("Regiao: "+pdvFusaoForm.getRegiao());System.out.println("Filho: "+pdvFusaoForm.getCodPDVFilho());System.out.println("Pai: "+pdvFusaoForm.getCodPDVPai());linhas=pstm.executeUpdate();System.out.println("CadPDVFusaoDAO: Excluiu "+linhas+" linha.");//Insere os PDV´s na tabela tblDEALER_FUSAOStringsquery=" INSERT INTO tblDEALER_FUSAO"+" (nidregiao,sidagentevenda,pdv_filho) "+" VALUES (?,?,?)";pstm=con.prepareStatement(squery);System.out.println("squery: "+squery);System.out.println("Regiao: "+pdvFusaoForm.getRegiao());System.out.println("Filho: "+pdvFusaoForm.getCodPDVFilho());System.out.println("Pai: "+pdvFusaoForm.getCodPDVPai());intregiao=(pdvFusaoForm.getRegiao()==null||"".equals(pdvFusaoForm.getRegiao().trim())?0:Integer.parseInt(pdvFusaoForm.getRegiao().trim()));pstm.setInt(1,regiao);intpdvFilho=(pdvFusaoForm.getCodPDVFilho()==null||"".equals(pdvFusaoForm.getCodPDVFilho().trim())?0:Integer.parseInt(pdvFusaoForm.getCodPDVFilho().trim()));pstm.setInt(1,pdvFilho);intpdvPai=(pdvFusaoForm.getCodPDVPai()==null||"".equals(pdvFusaoForm.getCodPDVPai().trim())?0:Integer.parseInt(pdvFusaoForm.getCodPDVPai().trim()));pstm.setInt(1,pdvPai);/* String regiao = pdvFusaoForm.getRegiao(); if(regiao == null || "".equals(regiao.trim())){ pstm.setInt(1, 0); }else{ pstm.setInt(1, Integer.parseInt(regiao)); } String pdvfilho = pdvFusaoForm.getCodPDVFilho(); if (pdvfilho == null || "".equals(pdvfilho.trim())){ pstm.setInt(1, 0); }else{ pstm.setInt(2, Integer.parseInt(pdvfilho)); } String pdvpai = pdvFusaoForm.getCodPDVPai(); if (pdvpai == null || "".equals(pdvpai.trim())){ pstm.setInt(3, 0); }else{ pstm.setInt(2, Integer.parseInt(pdvpai)); }*//* if(pdvFusaoForm.getRegiao() == null || pdvFusaoForm.getRegiao().equals("")){ pstm.setInt(1, 0); }else{ pstm.setInt(1, Integer.parseInt(pdvFusaoForm.getRegiao())); } if(pdvFusaoForm.getCodPDVFilho() == null || pdvFusaoForm.getCodPDVFilho().equals("")){ pstm.setInt(2, 0); }else{ pstm.setInt(2, Integer.parseInt(pdvFusaoForm.getCodPDVFilho())); } if(pdvFusaoForm.getCodPDVPai() == null || pdvFusaoForm.getCodPDVPai().equals("")){ pstm.setInt(3, 0); }else{ pstm.setInt(3, Integer.parseInt(pdvFusaoForm.getCodPDVPai())); }*/linhas=pstm.executeUpdate();System.out.println("Inseriu "+linhas+" linha.");//Atualiza o Código do Pai na Tabela tblAGENTECANALVENDApstm=con.prepareStatement(" UPDATE tblAGENTECANALVENDA "+" SET CODIGO_UNIFICADO = ? "+" WHERE NIDREGIAO = ? "+" AND sidagentevenda = ? ");pstm.setInt(1,Integer.parseInt(pdvFusaoForm.getCodRedePai()));pstm.setInt(2,Integer.parseInt(pdvFusaoForm.getRegiao()));pstm.setInt(3,Integer.parseInt(pdvFusaoForm.getCodPDVPai()));linhas=pstm.executeUpdate();System.out.println("Atualizou codigo unificado"+linhas+" linha.");//Atualiza o Código do Filho na Tabela tblAGENTECANALVENDApstm=con.prepareStatement(" UPDATE tblAGENTECANALVENDA "+" SET pdv_filho = ? "+" WHERE NIDREGIAO = ? "+" AND sidagentevenda = ? ");pstm.setInt(1,Integer.parseInt(pdvFusaoForm.getCodPDVFilho()));pstm.setInt(2,Integer.parseInt(pdvFusaoForm.getRegiao()));pstm.setInt(3,Integer.parseInt(pdvFusaoForm.getCodPDVPai()));linhas=pstm.executeUpdate();System.out.println("Atualizou pdv_filho "+linhas+" linha.");}catch(SQLExceptionsqlException){System.out.println("sqlException: "+sqlException);}catch(Exceptione){System.out.println("Exception: "+e);}finally{System.out.println("CadPDVFusaoDAO: Fechando conexão.");rsClose();pstmClose();close(con);}returntrue;}
fiaux
É... o copy paste te matou. A exception quer dizer que algum dos "?" não possui valor associado. Olha seus pstm.setInt. Todos 1!!
Realamente o copy paste me matou.
Chega ser engraçado essa parada.
Agora voltou para o erro antigo: Exception: java.lang.NumberFormatException: For input string: “”
Agora alterei as numerações.
São só 3 variáveis.