Saber se select não retornou nada

Tem como se eu fizer um select no banco Oracle saber no Java se ele não retornou nada?

Vc está utilizando um ResultSet na sua classe ?

Supondo que você obtem o resultado do seu select em um ResultSet você pode fazer o seguinte:

ResultSet rs = statement.executeQuery(SQL_QUERY);
if (!rs.next()) {
    System.err.println("Não há registros");
} else {
    //Processa os registros
}

if (! rs.next()) { . . .}

Se não for possível fazer um next na primeira tentativa seu resultset estará vazio.

Mas cuidado ao utilizar este código se vc pretende fazer um loop no resultset logo após o if. É que se houver registros o next() invocado no if moverá o “ponteiro” para o primeiro elemento existente, e o while/for moveria para o segundo.

Tem sim.

//Faz sua consilta no Banco de Dados
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");

if (rs.next() ){
  //Se entrar aqui retornou alguma coisa
}
else{
 //Se entrar aqui não retornou nada
}

Pessoal tentei usar as dicas de vcs mas esbarrei em um problema, sempre o meu select resultará em apenas 1 linha.
No teste if o meu pontei irá automaticamente mover para a próxima. Então eu tentei retornar para o primeiro ponteiro usando first() mas dessa forma me retorna um SQLException.
Olha o meu código:

ResultSet rsSelect1 = conexao2.stm.executeQuery();
            if(!rsSelect1.next()){
                JOptionPane.showMessageDialog(null,
                    "Item desativado, consulte novamente.",
                    "Aviso!",
                    JOptionPane.WARNING_MESSAGE);
            }else{ 
                rsSelect1.first();
                try{
                Thread.sleep(200);
                }catch(InterruptedException ie){
                    JOptionPane.showMessageDialog(null,
                        "Erro na Thread MAIN. Código: " + ie,
                        "Erro!",
                        JOptionPane.ERROR_MESSAGE);
                }
                while(rsSelect1.next()){
                    jTextFieldCodigoProduto2.setText(rsSelect1.getString("COD_MAT"));
                    jTextFieldDescProduto.setText(rsSelect1.getString("DESC_MAT"));
                    jTextFieldDescCompleta.setText(rsSelect1.getString("DESC_MAT_COMPLE"));
                }
            }

Não dá para usar o fist() nessa situação?

Usa o beforeFirst();

Usei o beforefirs() e está dando o seguinte erro:

SQLException: Operação inválida para encaminhar apenas
conjunto de caracteres: beforeFirst

Será que é porque tenho apenas uma linha como retorno?

Como esta o seu select ?

O meu select é esse:

conexao2.setSelect("select cod_mat, desc_mat, desc_mat_comple " +
                "from bebwilson.cad_matpri "+
                "where desativado is null " +
                    "and cod_mat = " + jTextFieldCodigoProduto.getText());
        conexao2.abrirbanco();

Não sei se é prático isso, mas nesse exato momento eu consegui resolver dessa forma:

try{
            ResultSet rsSelect1 = conexao2.stm.executeQuery();
                      
            if(!rsSelect1.next()){
                JOptionPane.showMessageDialog(null,
                    "Item desativado, consulte novamente.",
                    "Aviso!",
                    JOptionPane.WARNING_MESSAGE);
            }else{
                conexao2.abrirbanco();
                ResultSet rsSelect3 = conexao2.stm.executeQuery(); 
                while(rsSelect3.next()){
                    jTextFieldCodigoProduto2.setText(rsSelect1.getString("COD_MAT"));
                    jTextFieldDescProduto.setText(rsSelect1.getString("DESC_MAT"));
                    jTextFieldDescCompleta.setText(rsSelect1.getString("DESC_MAT_COMPLE"));
                }
            }
            
         }catch(SQLException sqle){
            JOptionPane.showMessageDialog(null,
                    "Impossível conectar com o Banco de Dados! Código: " + sqle.toString(),
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
        }

[code]ResultSet rsSelect1 = conexao2.stm.executeQuery();
boolean existe = false;

while (rsSelect1.next()) {
existe = true;
jTextFieldCodigoProduto2.setText(rsSelect1.getString(“COD_MAT”));
jTextFieldDescProduto.setText(rsSelect1.getString(“DESC_MAT”));
jTextFieldDescCompleta.setText(rsSelect1.getString(“DESC_MAT_COMPLE”));
}

if (!existe) {
JOptionPane.showMessageDialog(null,
“Item desativado, consulte novamente.”,
“Aviso!”,
JOptionPane.WARNING_MESSAGE);
}[/code]

Para navegar pelo ResultSet é preciso avisa-lo, pois o default é forward only, vela o que eu escrevi aqui: http://www.guj.com.br/posts/list/35148.java

caso não queira mudar o padrão do ResultSet, faça como disse o julianostr, ou substitua o seu while() por um do {} while()

flw

Senhores,

if(rs.next()){
 // faz o que tem que fazer, já que rs.next() manda justamente para o primeiro registro
}
else{
  System.out.println("Não veio nada!!");
}

Certo??