Pessoal, preciso de uma ajuda.
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 (String id : request.getParameterValues("id")){ //Aqui vai vir os ids numa lista
String[] nome = (String[]) request.getParameterMap().get("name"+id);
for (String nome1 : nome) {
out.println(nome1);
Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'");
}
String[] address = (String[]) request.getParameterMap().get("address"+id);
for (String end : address) {
out.println(end);
Conexao.stm.executeUpdate("UPDATE usuarios SET end='"+end+"' where id ='"+id+"'");
}
}
Obrigado
Marcos
Isso ajuda?
if(nome.length == 0 || nome == null){
// ...
}
Adriel, já tente isso, mas não resolveu.
Acredito que deve ter outro jeito
O correto é com a comparação ao contrário:
if(nome == null || nome.length == 0){
//É vazio.
}
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:
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 (String id : request.getParameterValues("id")){ //Aqui vai vir os ids numa lista
String[] valor = (String[]) request.getParameterMap().get("valor"+id);
for (String valor1 : valor) {
out.println(nome1);
Conexao.stm.executeUpdate("UPDATE usuarios SET valor='0' where id ='"+id+"'");
}
}
Marcos
Faz assim:
String[] nome = (String[]) request.getParameterMap().get("name"+id);
if (nome == null) nome = new String[0];
Viny não deu certo da maneira que vc me enviou…
Acabei fazendo assim, mas acredito que não é a melhor maneira.
for (String id : request.getParameterValues("id")){ //Aqui vai vir os ids numa lista
String[] nome = (String[]) request.getParameterMap().get("name"+id);
if (nome == null) {int nome1 = 0{
Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'");
}else{
for (String nome1 : 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
Imagino que no seu html, exista um campo id para cada checkbox certo?
Algo assim:
<input type="hidden" name="id" value="1">
<input type="checkbox" name="name1" >
<input type="hidden" name="id" value="2">
<input type="checkbox" name="name2" >
<input type="hidden" name="id" value="3">
<input type="checkbox" name="name3" >
E possível ler estes valores de forma mais simples (sem usar aquele getParameterMap):
for( String id : request.getParameterValues("id")) {
String nome = 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)
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 (String id : request.getParameterValues("id")){ //Aqui vai vir os ids numa lista
String[] nome = (String[]) request.getParameterMap().get("name"+id);
if (nome == null) {int nome1 = 0{
Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'");
}else{
for (String nome1 : nome) {
Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'");
}
}
String[] end= (String[]) request.getParameterMap().get("end"+id);
if (end== null) {int end1= 0{
Conexao.stm.executeUpdate("UPDATE usuarios SET end='"+end1+"' where id ='"+id+"'");
}else{
for (String end1 : end) {
Conexao.stm.executeUpdate("UPDATE usuarios SET end='"+end1+"' where id ='"+id+"'");
}
}
String[] ref= (String[]) request.getParameterMap().get("ref"+id);
if (ref== null) {int ref1 = 0{
Conexao.stm.executeUpdate("UPDATE usuarios SET ref='"+ref1+"' where id ='"+id+"'");
}else{
for (String ref1 : ref) {
Conexao.stm.executeUpdate("UPDATE usuarios SET ref='"+ref1+"' where id ='"+id+"'");
}
}
String[] coc= (String[]) request.getParameterMap().get("ref"+id);
if (coc== null) {int coc1 = 0{
Conexao.stm.executeUpdate("UPDATE usuarios SET coc='"+coc1+"' where id ='"+id+"'");
}else{
for (String coc1 : coc) {
Conexao.stm.executeUpdate("UPDATE usuarios SET coc='"+coc1+"' where id ='"+id+"'");
}
}
}
Obrigado
Marcos
[quote=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.
[/quote]
Dá para usar também. Apenas se tivesse mais de um campo no formulário com o nome “nome” voce precisaria dele.
Te recomendo dar uma lida nesta apostila aqui: http://www.caelum.com.br/download/caelum-java-web-fj21.pdf
E de fácil leitura e vai te ensinar as boas práticas para o desenvolvivmento web.