Dúvidas com Struts

24 respostas
V

Bom dia a todos,

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_FUSAO
			String squery = " 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.");

Desde já agradeço,

Vitor Bonfim

24 Respostas

fiaux

O que acontece? Alguma msg de erro?

V

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!

if(pdvFusaoForm.getCodPDVPai().equals("") || pdvFusaoForm.getCodPDVPai()== null){

#####ERRO   pstm.setInt(3, Integer.parseInt(pdvFusaoForm.getCodPDVPai()));

}else{

pstm.setInt(3, Integer.parseInt(pdvFusaoForm.getCodPDVPai()));

}
V

Galera,

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? :slight_smile: Abraço…

V

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

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

Obrigado,

Vitor

fiaux

Mesmo problema ainda? Bota o stacktrace todo.

fabiozoroastro

Vítor, altere seus ifs para:

final String regiao =  pdvFusaoForm.getRegiao();
if(regiao == null || "".equals( regiao.trim() ) ){  
   pstm.setInt(1, 0);  
}else{  
   pstm.setInt(1, Integer.parseInt(regiao));  
}

ou

int intRegiao = ( pdvFusaoForm.getRegiao() == null || "".equals( pdvFusaoForm.getRegiao().trim() ) ? 0 : Integer.parseInt(pdvFusaoForm.getRegiao().trim());
pstm.setInt(1, intRegiao);

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

O mesmo problema.

Agora fiz assim:

//Insere os PDV´s na tabela tblDEALER_FUSAO
			String squery = " 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

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

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

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:

public boolean associar(CadPDVFusaoForm pdvFusaoForm) throws IOException{		
			
		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.");
			Connection con = getConnection();			
			
			int linhas = 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() + "'");*/
			
			String sql = " 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_FUSAO
			String squery = " 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());
			
			
			int regiao = ( pdvFusaoForm.getRegiao() == null || "".equals( pdvFusaoForm.getRegiao().trim() ) ? 0 : 
			Integer.parseInt(pdvFusaoForm.getRegiao().trim()));   
			pstm.setInt(1, regiao);
			
			int pdvFilho = ( pdvFusaoForm.getCodPDVFilho() == null || "".equals( pdvFusaoForm.getCodPDVFilho().trim() ) ? 0 :
			Integer.parseInt(pdvFusaoForm.getCodPDVFilho().trim()));   
			pstm.setInt(1, pdvFilho);
			
			int pdvPai = ( 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 tblAGENTECANALVENDA
			pstm = 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 tblAGENTECANALVENDA
			pstm = 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(SQLException sqlException){
				System.out.println("sqlException: "+ sqlException);
			}catch(Exception e){
				System.out.println("Exception: "+ e);
			}finally{
				System.out.println("CadPDVFusaoDAO: Fechando conexão.");
				rsClose();
				pstmClose();
				close(con);
			}
		return true;
	}
fiaux

É... o copy paste te matou. A exception quer dizer que algum dos "?" não possui valor associado. Olha seus pstm.setInt. Todos 1!!

int regiao = ( pdvFusaoForm.getRegiao() == null || "".equals( pdvFusaoForm.getRegiao().trim() ) ? 0 :   
             Integer.parseInt(pdvFusaoForm.getRegiao().trim()));     
             pstm.setInt(1, regiao);  
               
             int pdvFilho = ( pdvFusaoForm.getCodPDVFilho() == null || "".equals( pdvFusaoForm.getCodPDVFilho().trim() ) ? 0 :  
             Integer.parseInt(pdvFusaoForm.getCodPDVFilho().trim()));     
             pstm.setInt(1, pdvFilho);  
               
             int pdvPai = ( pdvFusaoForm.getCodPDVPai() == null || "".equals( pdvFusaoForm.getCodPDVPai().trim() ) ? 0 :  
             Integer.parseInt(pdvFusaoForm.getCodPDVPai().trim()));     
             pstm.setInt(1, pdvPai);

E as demais variáveis? São três (?,?,?).

fabiozoroastro

Pronto, resolvido neh. :slight_smile: Vou almoçar. Flws!

V

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.

Deve ser uma bobeira esse erro.

Obrigado.

Criado 13 de maio de 2008
Ultima resposta 13 de mai. de 2008
Respostas 24
Participantes 5