Diferenciar Zero de Null

10 respostas
augustocolom

Olá Galera,
Estou com um problema na hora de fazer uma verificação nos dados da minha tabela. Eu preciso analisar todos as cédulas da minha tabela e só deixar o sistema funcionar se todas estiverem com algum valor igual ou maior que 0. O problema é que quando o usuário deixa a cédula em branco, ele entende como zero e não cai no else. Alguém sabe como tratar isso?

if(rs.getInt("num_estrada") > 0 ||
												
	  rs.getInt("num_estrada") == 0)
										
	  {

											
	  System.out.println("OK");											  
											
  }
										
	  else
											
  {
											
	 System.out.println("VALOR INVALIDO NA TABELA");	
											
	  return 0;  

									
	  }

10 Respostas

rdgms

opaa…
isso acontece porque você da um rs.getInt() e o valor default de int é 0.

jgbarros

Usa rs.getString(“num_estrada”)
Mas cuidado, pois String com null ou “” não é a mesma coisa.
O ideal é colocar uma restrição de not null no banco e tratar na sua classe de negócio.

adrian.gois

Isso mesmo. Pega string e compara com equals :stuck_out_tongue:

T
if (rs.getInt ("entrada") == 0 && rs.wasNull()) {
    ... entrada era "null", não zero
}
A

Olá Augusto. O método getInt() retorna 0 quando o valor do campo é null. Para saber se o campo que você acabou de ler era nulo, chame o método wasNull() depois de recuperar seu inteiro com o metodo getInt(). Exemplo abaixo:

int numEstrada = rs.getInt("num_estrada"); if (rs.wasNull() || numEstrada < 0 { System.out.println("VALOR INVALIDO NA TABELA"); } else { System.out.println("OK"); }

augustocolom

Hum,
No caso eu preferiria não mexer no banco, a coluna “num_estrada” teria que ser do tipo integer. Fiz o teste usando getString, mas não deu certo, ele cai no else com valores = a “0”,
olha como ficou:

if(rs.getInt("num_estrada") > 0 ||
	 rs.getString("num_estrada") == "0")
 {
	System.out.println("BELEZA");											  
 }
 else
{
	System.out.println("DADOS INVALIDOS");	
	 return 0;  
 }

Ele não deve cair no else com valores = a 0, mas sim com valores nulos.
Sabe se existe outra forma de tratar isso sem mexer na estrutura do banco?

Abraços

marcosharbs

pq vc num usa um Integer ao invez de int o Integer aceita null diferente de tipo primitivos, se vc não atribuir um valor a um objeto do tipo Integer quando vc for buscar o valor daquele objeto ele vai te retornar null

Felagund

O Problema esta na API do JDBC, onde um ResultSet retorna somente um int, ele fica preso ao tipo primitivo nesse caso.

exprimente o rs.wasNull() que citaram acima, nunca usei ele, mas me pareceu interessante.

[]'s

rdgms

Oque acha de tentar:

thingol:
if (rs.getInt ("entrada") == 0 && rs.wasNull()) { ... entrada era "null", não zero }

augustocolom

thingol:
if (rs.getInt (&quot;entrada&quot;) == 0 && rs.wasNull()) { ... entrada era &quot;null&quot;, não zero }

Valeu Thingol,

Problema Resolvido
Ficou assim…

if(rs.getInt("num_estrada") &gt; 0 || !rs.wasNull())
													  
 {
	 System.out.println("BELEZA");											  
}
 else
{//Else Numero de Propriedades
	
	return 0;  
 }
Criado 7 de agosto de 2009
Ultima resposta 7 de ago. de 2009
Respostas 10
Participantes 8