Condicao no if nao funciona quando null[resolvido]

9 respostas
A

pessoal,

eu estava mexendo num codigo (condicao) e tinha certeza que estava certo,alias, pela logica ele deveria estar

a comparacao abaixo diz que se a selecao for nula ele imprime “vazia”, senao, imprime “cheia”

no entanto, tanto quando ele acha algo, como quando ele acha, ele me mostra “cheia”

eis o codigo

try {
String connectionURL = "jdbc:mysql://localhost:3306/banco";
Connection con;
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(connectionURL, "banco", "senha");
String bancosql = "select numero, nome FROM dados WHERE nome LIKE '%"+str+"%' ";
Statement stm = con.createStatement();
stm.executeQuery(bancosql);
ResultSet rs= stm.getResultSet();
while (rs.next ()){
out.println("<a href='teste.jsp?numero="+rs.getString("numero")+"'><li onclick='fill("+rs.getString("nome")+");'>"+rs.getString("nome")+"</li></a>");
}
if (bancosql == null) {
    out.println("vazia");
    } else {
      out.println("cheia");
    }
}
catch(Exception e)
{
out.println("Exception is ;"+e);
 
}

9 Respostas

A

mas é para imprimir cheia msm, pois sua variavel bancosql nao é nula.

t+

Hebert_Coelho

Vc está comparando com o SQL (bancosql) e não com o resultado da sua consulta. ^^

A

Entao, mas no IF diz que caso seje [b]null/b ele deveria imprimir vazia…

ruivo

Vamos lá, você está com um sério problema de conceito.
No seu código, abaixo, vc tem

String bancosql = "select numero, nome FROM dados WHERE nome LIKE '%"+str+"%' ";

E em nenhum lugar do código vc anula essa varíavel. É como vc colocasse uma informação numa caixinha e NUNCA mais mexesse nela, seja pra encher, seja pra esvaziar.
Aí, lá pra frente, vc faz

if (bancosql == null) {  
       out.println("vazia");  
    } else {  
       out.println("cheia");  
    }  
}

Oras, a caixinha bancosql nunca foi esvaziada, portanto, imprimirá sempre ‘cheia’

A

ruivo:
andrests.sp:

Entao, mas no IF diz que caso seje [b]null/b ele deveria imprimir vazia…

Vamos lá, você está com um sério problema de conceito.
No seu código, abaixo, vc tem

String bancosql = "select numero, nome FROM dados WHERE nome LIKE '%"+str+"%' ";

E em nenhum lugar do código vc anula essa varíavel. É como vc colocasse uma informação numa caixinha e NUNCA mais mexesse nela, seja pra encher, seja pra esvaziar.
Aí, lá pra frente, vc faz

if (bancosql == null) {  
       out.println("vazia");  
    } else {  
       out.println("cheia");  
    }  
}

Oras, a caixinha bancosql nunca foi esvaziada, portanto, imprimirá sempre ‘cheia’

Entao ruivo,

Mas eu nao preciso esvaziar ela; a consulta me retorna uma lista de nomes(caso ache), ela estara “cheia”, se ele nao achar , ela estara “vazia”
porque eu deveria esvaziar?

ruivo

Por isso que eu disse que você está com um problema de conceito. Quando você executa a query, o resultado dela não fica armazenado em bancosql. Essa variável é só lida, nunca escrita. Uma vez que ninguém escreve nela, ela sempre ficará ‘cheia’.

O que você deveria testar é o ResultSet, para verificar quantos registros foram retornados. Aí sim, se você fizesse um teste, poderia dar cheia ou vazia. Entretanto, a aquela variável bancosql nunca é alterada. Logo, nunca será vazia.

Só uma sugestão. Eu sugiro fortemente que você deva estudar o básico do básico de algoritmos. Esse tipo de erro denuncia essa deficiência.

A

ruivo:
andrests.sp:

Entao ruivo,

Mas eu nao preciso esvaziar ela; a consulta me retorna uma lista de nomes(caso ache), ela estara “cheia”, se ele nao achar , ela estara “vazia”
porque eu deveria esvaziar?

Por isso que eu disse que você está com um problema de conceito. Quando você executa a query, o resultado dela não fica armazenado em bancosql. Essa variável é só lida, nunca escrita. Uma vez que ninguém escreve nela, ela sempre ficará ‘cheia’.

O que você deveria testar é o ResultSet, para verificar quantos registros foram retornados. Aí sim, se você fizesse um teste, poderia dar cheia ou vazia. Entretanto, a aquela variável bancosql nunca é alterada. Logo, nunca será vazia.

Só uma sugestão. Eu sugiro fortemente que você deva estudar o básico do básico de algoritmos. Esse tipo de erro denuncia essa deficiência.

Esta sua logica de utilizar o ResultSet eu já tinha utilizado, e acontecei a mesma coisa, por isso, eu estava testando o select.

Rodrigo_Sasaki

o que ta faltando é saber que NULO e VAZIO são coisas diferentes…

exemplo:

Você executa essa query e ela não traz nenhum registro pra você. Então o ResultSet está vazio, mas o objeto existe mesmo assim, ou seja,
o objeto não é nulo, porém está vazio.

Como você só testa para nulo e não para vazio, sempre vai cair no seu else, porque o objeto está lá.

A

Consegui da seguinte forma,

boolean verifica = false;
while (rs.next ()){
         verifica = true;
out.println("<a href='teste.jsp?numero="+rs.getString("numero")+"'><li onclick='fill("+rs.getString("nome")+");'>"+rs.getString("nome")+"</li></a>");
}
if (!verifica) {
    out.println("vazia");
}
if (verifica) {
  out.println("cheia");
}}

ruivo vou dar uma olhada no caso dos algoritimos como voce mencionou, obrigado

valeu pessoal

Criado 8 de novembro de 2011
Ultima resposta 9 de nov. de 2011
Respostas 9
Participantes 5