Comparação de Inteiro com Null RESOLVIDO--resultset.wasNull

15 respostas
leandrovrb

Ola pessoal!
Estou querendo comparar um valor no BD com uma variavel ambas Integer, Mas qdo nao existe o valor no BD eu nao consigo executar a outra parte do codigo:

Na verdade eu queria comparar uma variavel com outra variavel inteiro null.pq possa ser que no BD possa nao existir registro pelo qual estou pesquisando.tem jeito?

O erro que aparece apos eu executar este comando é o seguinte:
Illegal Operation on empty result set.( pelo meu entender a variavel esta vazia)
meu codigo:

try{
     String sql= ("select * from dvenda where codProd like " +codProdAdd +" and codVenda like "+tfCodVenda.getText()); //
     con_prod.executeSQL(sql);
     con_prod.resultset.first();
     codProdVenda=con_prod.resultset.getInt("codProd");
     if(codProdVenda == 0){
       JOptionPane.showMessageDialog(null,codProdVenda);  
     }
     
     else{
     JOptionPane.showMessageDialog(null,"é diferente de zero");
 }}
  catch (SQLException erro)
{
    JOptionPane.showMessageDialog(null,"NAO ACEITOU NEM ALTERAR NEM INSERIR..."+erro);
}
    
}

15 Respostas

adriano_si

cara… não sei qual BD estás usando, mas podes colocar o banco pra na hora do INSERT, se nenhum valor for preenchido ele gravar um valor default = 0… aí não passarias por essa…

Falows :wink:

maquiavelbona

Se isso

tfTeste.setText(con_prod.resultset.getString("codProd")); for NULL e você tentar

tfTeste.getText().trim() vai te dar um NPE na cara. O que ele tá reclamando é como o ResultSet é vazio, você exigir ele ir para a primeira posição é impossível ( não existe primeira posição se não há posições! ) e mesmo que passe, não tem como ele dar um getString() ou getInt() em algo que não existe. Então tente mudar esse trecho prevendo esse comportamento.

Até!

leandrovrb

Mudei o codigo aee pra ver se melhor do jeito ! e o que vc me disse, nao retornava um valor se existisse no BD!

mas tem como eu fazer algo para que eu faça uma comparação?

dmandrak

Cara, procura na documentação se tem dbNull.

É um tipo de dado.

Deve ter algo do tipo isDBNull(aaa) que retorna verdadeiro ou falso.

Faz essa pergunta onde vc tá tendo problema e trata o erro, como por exemplo igualar a 0, ou a “”…

maquiavelbona

Faça a busca no banco pelo código que você quer inserir e pegue o ResultSet. Aí você pode tentar algo assim:

if(meuResultSet.next()){System.out.println("Droga, já existe o código.");} else{System.out.println("Euba! Posso inserir esse código");}
Isso porque na documentação da classe ResultSet ( ler documentação é bom e salva uma araucária ) diz que o método next() retorna true caso consiga mover para o próximo registro ( no começo ele não aponta para nada ) e false caso não consiga. Se não conseguir não tem registro! Se não tem registro não tem código! Se não tem código… ah cansei. Mas então, é essa a idéia.

Até!
Edit: next é método e não atributo! ( faltou o () ).

dmandrak

maquiavelbona:
Faça a busca no banco pelo código que você quer inserir e pegue o ResultSet. Aí você pode tentar algo assim:

if(meuResultSet.next){System.out.println("Droga, já existe o código.");} else{System.out.println("Euba! Posso inserir esse código");}
Isso porque na documentação da classe ResultSet ( ler documentação é bom e salva uma araucária ) diz que o método next() retorna true caso consiga mover para o próximo registro ( no começo ele não aponta para nada ) e false caso não consiga. Se não conseguir não tem registro! Se não tem registro não tem código! Se não tem código… ah cansei. Mas então, é essa a idéia.

Até!

Bem…

A minha idéia era por aí, mas a função era mais bestinha.

Não existe essa isdbnull? Eu confesso que conheço ela do VB, não do Java.

victorwss

Não seria melhor colocar resultset.next() e verificar o retorno ao invés de usar resultset.first()?

leandrovrb

Obrigado galera, deu certo aq com o while e pensei no que o maquiavelbona disse sobre nao existir o primeiro registro, entao coloquei o codigo assim tb e deu certinho tb, era oq eu queria

Vlw Obrigado pela força galera…

String sql= ("select * from dvenda where codProd like " +codProdAdd +" and codVenda like "+tfCodVenda.getText()); // con_prod.executeSQL(sql); if(con_prod.resultset.first()) {JOpt(null,"ACHOU")} else {JOpt(null,"NAO ACHOU")}

maquiavelbona

Dica: Não use first(). Tem JDBC drivers com menor preocupação com a API que não garantem muito o comportamento nem de first() e nem de last(). Usei um JDBC driver tabajara que eu executava first() numa busca vazia e ele me retornava um ponteiro inválido.

Até!

dudaskank

O que você vai precisar fazer é uma mistura que o dmandrak e o resto do pessoal falou aqui. Vi que seu ResultSet é um atributo de alguma classe sua, então deve ficar mais ou menos assim

try {
     String sql= ("select * from dvenda where codProd like " +codProdAdd +" and codVenda like "+tfCodVenda.getText()); //
     con_prod.executeSQL(sql);
     // verifica se tem algum resultado
     if (con_prod.resultset.next()) {
          con_prod.resultset.first();
          codProdVenda=con_prod.resultset.getInt("codProd");
          // aqui verifica se era nulo a última coluna lida
          if(con_prod.resultset.wasNull()) {
               JOptionPane.showMessageDialog(null,codProdVenda);  
          }
          else {
               JOptionPane.showMessageDialog(null,"é diferente de zero");
          }
     }
} catch (SQLException erro) {
     JOptionPane.showMessageDialog(null,"NAO ACEITOU NEM ALTERAR NEM INSERIR..."+erro);
}

Isso tudo tem na documentação do java, da uma pesquisada se ficou alguma dúvida:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html

dmandrak

dudaskank:
O que você vai precisar fazer é uma mistura que o dmandrak e o resto do pessoal falou aqui. Vi que seu ResultSet é um atributo de alguma classe sua, então deve ficar mais ou menos assim

try {
     String sql= ("select * from dvenda where codProd like " +codProdAdd +" and codVenda like "+tfCodVenda.getText()); //
     con_prod.executeSQL(sql);
     // verifica se tem algum resultado
     if (con_prod.resultset.next()) {
          con_prod.resultset.first();
          codProdVenda=con_prod.resultset.getInt("codProd");
          // aqui verifica se era nulo a última coluna lida
          if(con_prod.resultset.wasNull()) {
               JOptionPane.showMessageDialog(null,codProdVenda);  
          }
          else {
               JOptionPane.showMessageDialog(null,"é diferente de zero");
          }
     }
} catch (SQLException erro) {
     JOptionPane.showMessageDialog(null,"NAO ACEITOU NEM ALTERAR NEM INSERIR..."+erro);
}

Isso tudo tem na documentação do java, da uma pesquisada se ficou alguma dúvida:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html

VIU?!?!?!

Não é isdbnull mas sim wasNull!!!

leandrovrb

Obrigado galera coloquei aq executando while entao!!! ficou joia viooo

agradeço a todos que me ajudaram!!! :slight_smile:

infosoftbh

Cara, será que vc pode me ajudar ybm… tem um tempão que to quebrando cabeça…
Em meu cadastro, o usuário que não preencher um dado, não vai ser exibido na pagina principal (tipo: http://francisimoveis.com/caduser/exibir.php)
Mas em um determinada parte do cadastro, qnd o usuário não coloca a foto, ela fica “null” e issi entra natabela como “null”, mas fica aparecendo uma imagem vazia, como vc pode verificar em “http://francisimoveis.com/caduser/exibir.php”, o código que estou usando é o seguinte:

“exibir.php”

<? include ("include/conexao.php"); $query = mysql_query("select * FROM cadastro_perfil"); if (!$query){ die ("Problemas ao executar o sql !!!"); } else { while ($coluna = mysql_fetch_array($query)){ $login = $coluna["login"]; $titulo = $coluna["titulo"]; $servico = $coluna["servico"]; switch ($cadastro_perfil) { case "$id": ?> serviços @import url("include/estilo.css");
<? if ($foto=="") { ?>
<? echo "$titulo"; ?>

<? echo "
"; ?>
<? echo "$servico"; ?>
<? } else { ?> <? break; } } } } ?>

 

------------------------------------------------------ E NATABELA FICA ASSIM: ------------------------------------------------------

Caso puder me ajudar, muito obrigado!

Paulo César
[email removido]

JhowTroMundo

Não parece java

infosoftbh

PROBLEMA RESOLVIDO.

Muito agradecido!

Criei um novo campo na tabela sql;
No registro criei um radio Valores 1 e 2
Na exibição usei:
$query = mysql_query(“SELECT * FROM cadastro_perfil where publicar=‘1’”);
ENTÃO SOMENTE VAI APARECER QUEM MARCAR PUBLICAR (vr 1)
Quem não marcar e/ou marcar “NÃO PUBLICAR” (vr 2), não vai ser exibido.

PARA VER: http://francisimoveis.com/caduser/exibir.php
PARA FAZER UM TESTE: http://francisimoveis.com/caduser

Criado 24 de novembro de 2008
Ultima resposta 17 de jun. de 2011
Respostas 15
Participantes 8