style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

¿Cómo validar que "NO existe un dato buscado en la Base de datos" ?

Hola expertos:

Estoy haciendo una aplicacion con Netbeans muy sencilla pero ya me desesperé porque no se mucho sobre como validar que NO EXISTE UN REGISTRO en la base de datos. La interfaz consiste en consultar un número de expediente que el usuario ingresará en la tabla de la base de datos, si existe le envia un mensaje al usuario hasta aqui si lo hace, lo que no me hace es mostrar el mensaje cuando éste codigo no existe.
¿Me puden ayudar o sugerir como le puedo hacer por favor? Se los agradeceré mucho.
En mi JFrame tengo un boton: Guardar (btnGuardar) primero validé que lo que introduzca el usuario sean números y no estén vacíos, y luego llamo el método "ValidaExpediente" de la clase Consultas (c). Si me muestra el mensaje cuando si existe el expediente pero cuando no existe no hace nada, es decir no sale el mensaje de error que puse en el ultimo if.
Código del botón Guardar:

private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        String exp = txtExp.getText();
        String planos = txtPlanos.getText();
        if(exp.length() < 13 || exp.isEmpty()){
            JOptionPane.showMessageDialog(null, "El número del expediente tiene que ser de 13 digítos", "Error de captura", JOptionPane.ERROR_MESSAGE);
        } else
            if ( planos.isEmpty() ){
                JOptionPane.showMessageDialog(null, "El campo de número de planos está vacío", "Error de captura", JOptionPane.ERROR_MESSAGE);
            } else {
                    c.ValidaExpediente(exp, planos);
                    //this.setVisible(false);  
                    //pf.setVisible(true);
            //JOptionPane.showMessageDialog(null, "El campo de número de planos está vacío", "Error de captura", JOptionPane.OK_CANCEL_OPTION);
            System.out.println();
          }
    }

Código ValidaExpediente:

public void ValidaExpediente(String exp, String planos) {
        try{
            //String query1 = "SELECT escExpediente FROM KCPro WHERE escExpediente = ?";
            pstm = con.getConnection().prepareStatement("SELECT escExpediente FROM KCPro WHERE escExpediente = '" + exp+ "'");
            res = pstm.executeQuery();
            while(res.next()){
                String expedienteKCPro = res.getString("escExpediente");
                //System.out.println("Expediente: " + exp);
                if ( exp.equals(expedienteKCPro) ){                
                    JOptionPane.showMessageDialog(null, "Expediente encontrado: " + expedienteKCPro, "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                } else
                    if ( !exp.equals(expedienteKCPro) ) {
                        JOptionPane.showMessageDialog(null, "NO existe el expediente: " + exp, "Error de expediente", JOptionPane.ERROR_MESSAGE);
                    }
            }
            res.close();            
        } catch(SQLException e){
            JOptionPane.showMessageDialog(null, e);
        }
       
    }

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de adrianaaae

No se valida así

Mira cuando haces el select en la base de datos traes todo de escExpediente, y luego comparas el resultado obtenido, si te das cuenta estas evaluando el resultado, pero sino existe el resultado (es decir que no exista un resultado con exp ) te traería vació y eso estas comparando en tu if, y por eso no esta
validando nada, podrías utilizar res. getFetchSize().
Recuerdo que en el driver de mysql(API) existe ese método que regresa el número de registros de una consulta.
O también puedes usar un contador que aumente en el while, y lo declaras antes,y si fuera del while es 0 (como cuando lo declaras)
es que no devuelve nada o esta vació. Y allá dices que no existe.

Espero hayas entendido mi explicación. :)

Intento fallido

Hola adrianaae

Gracias por tu respuesta. Probé con ese metodo pero pareciera que no hace nada cuando no existe el numero del expediente.
Estoy utilizando SQL Server. El JTextField recibe el valor introducido por el usuario en el String exp, el nombre del campo en la tabla se llama escExpediente, y lo estoy guardando en un String llamado expedienteKCPro.
mmm me hice bolas con lo del contador y el while, perdón :(

Imagen de adrianaaae

Ok

Mira si te das cuenta estás consultando por un registro en particular (lo que te debería de regresar un registro) pero en caso de no haber no esta entrando en tu while, entiendes?? por eso no te imprime el mensaje de que no existe el registro, por eso te decía que puedes usar un contador o un simple boolean declarado por ejemplo :

Declaras un boolean entre=false;

y en el while pones entre=true;

y al salir del while pones una condición:

if(entre){
Mensaje que indica que no existe el registro
}

Imagen de adrianaaae

ESPERO TE HAYA SERVIDO

Y SI NO, COMENTA TU RESULTADO

¡¡ Listo !!!!

Gracias adrian
Ya quedó resuelto mi problema gracias a tu ayuda. Agrego código de como quedó.

public void ValidaExpediente(String exp, String planos) {
       
        String expedienteKCPro;
        boolean existe = false; //variable bandera para comprobar si NO existe el expediente en la BD
       
        try{            
            pstm = con.getConnection().prepareStatement("SELECT escExpediente FROM KCP WHERE escExpediente = '" + exp+ "'");            
            res = pstm.executeQuery();                        
            while(res.next()){
                existe = true;
                if(existe == true){
                    expedienteKCPro = res.getString("escExpediente");              
                    if ( exp.equals(expedienteKCPro) ){                
                        JOptionPane.showMessageDialog(null, "El expediente: " + expedienteKCPro + " si está en la BD", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                    }
                }    
            } //fin while res.next
            if ( existe == false ) {
                JOptionPane.showMessageDialog(null, "El expediente NO está en la base de datos,\nvuelva a capturar el número o reportelo a TI", "Error de captura", JOptionPane.ERROR_MESSAGE);
            }
            res.close();                        
           
        } catch(SQLException e){
            JOptionPane.showMessageDialog(null, e);
          }
       
    }

Mientras tanto estoy agragándole mas codigo para que verificarle al usuario que si existe el registro haga un update a otra tabla en la BD.

Gracias!!!

Imagen de adrianaaae

Para eso estamos.

Cualquier duda, ya sabes!!!

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">