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

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

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:

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é!

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?

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 “”…

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 () ).

[quote=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é![/quote]

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.

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

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

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é!

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

[quote=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[/quote]

VIU?!?!?!

Não é isdbnull mas sim wasNull!!!

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

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

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: [img]http://francisimoveis.com/caduser/tab_camp_foto_null.jpg[/img] ------------------------------------------------------

Caso puder me ajudar, muito obrigado!

Paulo César
paulocesarsouza@gmail.com

Não parece java

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