Uso o código abaixo para fazer atualização dos dados vindos de uma tabela com diversos ids, ou seja tenho um campo na tabela com um checkbox(id) e quando eleciono envio os dados dos outrso campos para atualização.
O problema está quando um dos campos está com o valor vazio ou nulo, sempre acontece um exception.
Não sei como verificar se o array está vazio ou nulo antes de entrar na clausula FOR.
String[] nome = (String[]) request.getParameterMap().get("name"+id);
Alguém pode me auxiliar com isso?
for(Stringid:request.getParameterValues("id")){//Aqui vai vir os ids numa lista String[]nome=(String[])request.getParameterMap().get("name"+id);for(Stringnome1:nome){out.println(nome1);Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'");}String[]address=(String[])request.getParameterMap().get("address"+id);for(Stringend:address){out.println(end);Conexao.stm.executeUpdate("UPDATE usuarios SET end='"+end+"' where id ='"+id+"'");}}
Caso contrário vai dar NullPointerException caso seja nulo.
PS: Arrays vazios não são um problema para o for, só nulos. O for simplesmente ignora um array vazio.
Marcos, quando for postar códigos, siga essas dicas:
M
Marcos_rhs
Obrigado Viny…
Foi mal, sempre postei da maneira correta, mas na pressa acabei postando ontem da maneira errada.
Viny, vc comentou que para arrays nulos pode haver problemas no FOR (NullPointerException), preciso atribuir um valor igual a 0 para o array caso seja nulo, pois preciso que entre no for e atualize as informações ou seja se o campo que carrega o array vier nulo, quero que carregue no array um valor 0, isso é possível?
Se vier nulo ou vazio:
request.getParameterMap().get("name"+id) == null;
preciso que seja atribuído 0
request.getParameterMap().get("name"+id) = 0;
for(Stringid:request.getParameterValues("id")){//AquivaivirosidsnumalistaString[]valor=(String[])request.getParameterMap().get("valor"+id); for(Stringvalor1:valor){out.println(nome1); Conexao.stm.executeUpdate("UPDATE usuarios SET valor='0' where id ='"+id+"'"); }}
Marcos
V
ViniGodoy
Faz assim:
String[] nome = (String[]) request.getParameterMap().get("name"+id);
if (nome == null) nome = new String[0];
M
Marcos_rhs
Viny não deu certo da maneira que vc me enviou…
Acabei fazendo assim, mas acredito que não é a melhor maneira.
for(Stringid:request.getParameterValues("id")){//AquivaivirosidsnumalistaString[]nome=(String[])request.getParameterMap().get("name"+id); if(nome==null){intnome1=0{Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'");
}else{for(Stringnome1:nome){out.println(nome1); Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'"); }
}
}
Alguma dica para melorar esse código?
Abraço
Marcos
A
AbelBueno
Imagino que no seu html, exista um campo id para cada checkbox certo?
Algo assim:
E possível ler estes valores de forma mais simples (sem usar aquele getParameterMap):
for(Stringid:request.getParameterValues("id")){
Stringnome=request.getParameter("name"+id);if(nome==null){nome="0"; }Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'");}
Aquele seu for para cada nome era desnecessário.
Mesmo que recebesse vários valores para um determinado id, apenas o último ficaria. (O update sobrescreveria os resultados anteriores).
Sobre a dica que pediu, há varias coisas que pode melhorar no seu código:
Tirar a manipulação de banco de dados do meio do código.
Pode isolar em DAOs por exemplo
Não lidar com o request “na mão”:
Pode criar uma classe que já leia os valores tipados, com opções de valores default caso sejam nulos.
(Isso se não for usar um framework que já faz tudo isso)
M
Marcos_rhs
Obrigado pela dica Abel…
No caso de eu atualizar mais de um campo além do nome, posso usar da maneira que vc demonstrou?
Eu estava fazendo daquela maneira, pois existem vários campos para serem atualizado além do nome para cada ID.
for(Stringid:request.getParameterValues("id")){//AquivaivirosidsnumalistaString[]nome=(String[])request.getParameterMap().get("name"+id); if(nome==null){intnome1=0{Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'");
}else{for(Stringnome1:nome){Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'"); }
}String[]end=(String[])request.getParameterMap().get("end"+id); if(end==null){intend1=0{Conexao.stm.executeUpdate("UPDATE usuarios SET end='"+end1+"' where id ='"+id+"'");
}else{for(Stringend1:end){Conexao.stm.executeUpdate("UPDATE usuarios SET end='"+end1+"' where id ='"+id+"'"); }
}String[]ref=(String[])request.getParameterMap().get("ref"+id); if(ref==null){intref1=0{Conexao.stm.executeUpdate("UPDATE usuarios SET ref='"+ref1+"' where id ='"+id+"'");
}else{for(Stringref1:ref){Conexao.stm.executeUpdate("UPDATE usuarios SET ref='"+ref1+"' where id ='"+id+"'"); }
}String[]coc=(String[])request.getParameterMap().get("ref"+id); if(coc==null){intcoc1=0{Conexao.stm.executeUpdate("UPDATE usuarios SET coc='"+coc1+"' where id ='"+id+"'");
}else{for(Stringcoc1:coc){Conexao.stm.executeUpdate("UPDATE usuarios SET coc='"+coc1+"' where id ='"+id+"'"); }
}
}
Obrigado
Marcos
A
AbelBueno
Marcos_rhs:
Obrigado pela dica Abel…
No caso de eu atualizar mais de um campo além do nome, posso usar da maneira que vc demonstrou?
Eu estava fazendo daquela maneira, pois existem vários campos para serem atualizado além do nome para cada ID.
Dá para usar também. Apenas se tivesse mais de um campo no formulário com o nome “nome” voce precisaria dele.