Como saber se o array é nulo ou vazio

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.