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{Stringsql=("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(SQLExceptionerro){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
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{Stringsql=("select * from dvenda where codProd like "+codProdAdd+" and codVenda like "+tfCodVenda.getText());//con_prod.executeSQL(sql);// verifica se tem algum resultadoif(con_prod.resultset.next()){con_prod.resultset.first();codProdVenda=con_prod.resultset.getInt("codProd");// aqui verifica se era nulo a última coluna lidaif(con_prod.resultset.wasNull()){JOptionPane.showMessageDialog(null,codProdVenda);}else{JOptionPane.showMessageDialog(null,"é diferente de zero");}}}catch(SQLExceptionerro){JOptionPane.showMessageDialog(null,"NAO ACEITOU NEM ALTERAR NEM INSERIR..."+erro);}
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{Stringsql=("select * from dvenda where codProd like "+codProdAdd+" and codVenda like "+tfCodVenda.getText());//con_prod.executeSQL(sql);// verifica se tem algum resultadoif(con_prod.resultset.next()){con_prod.resultset.first();codProdVenda=con_prod.resultset.getInt("codProd");// aqui verifica se era nulo a última coluna lidaif(con_prod.resultset.wasNull()){JOptionPane.showMessageDialog(null,codProdVenda);}else{JOptionPane.showMessageDialog(null,"é diferente de zero");}}}catch(SQLExceptionerro){JOptionPane.showMessageDialog(null,"NAO ACEITOU NEM ALTERAR NEM INSERIR..."+erro);}
Obrigado galera coloquei aq executando while entao!!! ficou joia viooo
agradeço a todos que me ajudaram!!!
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");
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.