Diferenciar Zero de Null

10 respostas
A

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

R

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

J

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.

A

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"); }

A

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

M

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

F

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

R

Oque acha de tentar:

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

A

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