Como saber se o array é nulo ou vazio

Java

15/10/2011

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
Marcos

Marcos

Curtidas 0

Melhor post

Carlos Heuberger

Carlos Heuberger

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) [[]]
GOSTEI 1

Mais Respostas

Marcos

Marcos

15/10/2011

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
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

15/10/2011

[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.... [[]]
GOSTEI 0
Marcos

Marcos

15/10/2011

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
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

15/10/2011

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... [[]]
GOSTEI 0
Marcos

Marcos

15/10/2011

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
GOSTEI 0
POSTAR