Como saber se o array é nulo ou vazio

15/10/2011

212

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
Responder

Post mais votado

16/10/2011

[quote="Marcos_rhs"]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. [b]String[] nome = (String[]) request.getParameterMap().get("name"+id); [/b] 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
Agora não sei o que é para testar: 1) o problema: testar se é um campo (qual?) - "um dos campos está com o valor vazio ou nulo"; ou 2) o que você quer saber: testar um dos arrays (qual?) - "o array está vazio ou nulo" de modo geral 1)
String campo = ...
if (campo == null) {
    // é nulo
}
if (campo.isEmpty) {  // só funciona se não nulo
    // é vazio
}

//  ou o contrário e junto
if (campo != null && !campo.isEmpty()) {
    // nem nulo nem vazio
}
2)
String[] array = ...
if (array == null) {
    // é nulo
}
if (array.length == 0) {
    // vazio
}

// ou o contrário e junto
if (array != null && array.length > 0) {
    // nem nulo nem vazio
}
(para o FOR normalmente é suficiente testar se não é nulo - se estiver vazio o FOR simplesmente não faz nada) [[]]
Responder

Mais Posts

16/10/2011

Marcos

Obrigado Simu pela dica... Simu sempre posto da maneira correta, mas ontem na pressa acabei postando da maneira errada. Sobre minha dúvida é que preciso passar pelo FOR e atualizar a informação sempre, ou seja se o campo que carrega o array vier vazio ou nulo preciso que atribua um valor 0 para que entre na clausula FOR e atualize a informação com o valor 0. É possível fazer isso? 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+"'");    
          }     
         
       }
Obrigado Marcos
Responder
[quote="Marcos_rhs"]Obrigado Simu pela dica... Simu sempre posto da maneira correta, mas ontem na pressa acabei postando da maneira errada. Sobre minha dúvida é que preciso passar pelo FOR e atualizar a informação sempre, ou seja se o campo que carrega o array vier vazio ou nulo preciso que atribua um valor 0 para que entre na clausula FOR e atualize a informação com o valor 0. É possível fazer isso? 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+"'");    
          }     
         
       }
Obrigado Marcos
acho que não entendi corretamente... principalmente o último exemplo esta me confundindo. Para a primeira parte tem que chamar os métodos correspondentes conforme o que for retornado pelo getParameterMap. Por exemplo, se for um Map<String, String>, ficaria assim:
String name = request.getParameterMap().get("name"+id);
if (name == null || name.isEmpty) {
    request.getParameterMap().put("name"+id, "0");
}
mas duvído que seja a melhor forma.... [[]]
Responder

16/10/2011

Marcos

Simu, minha intenção é atualizar vários campos de uma só vez.. Na minha tabela tenho 03 colunas, uma com um checkbox para cada ID onde seleciono as linhas que quero atualizar e atualizo os campos. O problema é quando um campo está vazio, dá NullPointerException. Preciso que mesmo que os campos estejam vazios atualize a informação. No último exemplo optei por atribuir o valor 0 caso o campo da linha selecionada venha vazio ou null. Depois do último post fiz assim, está funcionando mas acredito que não seja 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+"'");    
              }   
}

  
              String[] address = (String[]) request.getParameterMap().get("address"+id);     
if (address== null) {int end= 0{

    Conexao.stm.executeUpdate("UPDATE usuarios SET end='"+end+"' where id ='"+id+"'"); 

}else{
              for (String end : address) {       
                  out.println(end);     
                  Conexao.stm.executeUpdate("UPDATE usuarios SET end='"+end+"' where id ='"+id+"'");     
              }      
           } 
}   
Obrigado Marcos
Responder
ainda está meio estranho: em princípio esta substituindo uma lista - normalmente vários valores - por um simples valor (se for nulo). Isso indica um problema de lógica. O seguinte laço confirma isso:
for (String nome1 : nome) {         
    Conexao.stm.executeUpdate("UPDATE usuarios SET nome='"+nome1+"' where id ='"+id+"'");      
} 
como o id não muda nesse laço, está sempre atualizando o mesmo registro, prevalencendo o último valor setado... [[]]
Responder

16/10/2011

Marcos

ok Simu, Mas eu só entro no FOR mencionado na sua mensagem se o campo não estiver nulo. Se estiver nulo atribuo o valor 0 e atualizo, caso não seja nulo atualizo com o valor que recebi do campo da linha qe foi selecionado referente aou ID qe recebi. Como você faria, alguma dica? Marcos
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar