Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Nafko en 20 Mayo 2015, 01:43 am



Título: Problemas con next()
Publicado por: Nafko en 20 Mayo 2015, 01:43 am
Hola....

Tengo un pequeño problema, pero antes, explico que tengo una base de datos (bbdd), una clase ConexionBD y un formulario (FX), todo marcha bien hasta que, tenia que hacer la búsqueda por cliente, perfecto pero cuando no encontraba ese cliente por a, b o c motivo requería que entrara a otro método para hacer otra búsqueda por servicio esto lo hice con un if else, mediante el uso de next(), si next()==true entra en un ciclo while y muestra los datos en una tabla pero si next()==false pasa al else y se realiza una búsqueda por servicio pero al hacer eso el next() cambia de manera fantasmagórica dejo la base de datos y el proyecto ademas de las lineas de código que me tienen complicado...

Espero sus respuestas desde ya gracias :)

Cabe destacar que uso netbeans 8.0.1

Código:
private void BuscarActionPerformed(java.awt.event.ActionEvent evt) {                                       
        if (ingbuscar.getText().isEmpty()) {
            JOptionPane.showMessageDialog(null, "Ingrese un Numero de Factura");
        }
        DefaultTableModel modelo=(DefaultTableModel)Resultado.getModel();
        ConexionBD consultar=new ConexionBD();
        try {
            
            ResultSet registro=consultar.Consultar(Integer.parseInt(String.valueOf(ingbuscar.getText())));
            
            if (registro.next()) { //aqui se origina el problema, entra en true y sale en false
            
                
                
               // registro.first();
              
                int i=0;
                
                while (registro.next()==true) {
                    JOptionPane.showMessageDialog(null, "Cliente fue Encontrado");
                    modelo.addRow(new Object[1]);
                    Resultado.setValueAt(registro.getString("Nombre"),i,0);
                    Resultado.setValueAt(registro.getString("Apellido"),i,1);
                    Resultado.setValueAt(registro.getString("Rut"),i,2);
                    Resultado.setValueAt(registro.getString("Cliente"),i,3);
                    Resultado.setValueAt(registro.getString("Servicio"),i,4);
                    Resultado.setValueAt(registro.getString("Medidor"),i,5);
                    Resultado.setValueAt(registro.getString("Costo"),i,6);
                    Resultado.setValueAt(registro.getString("Total"),i,7);
                    i++;
                         //JOptionPane.showMessageDialog(null, "Entro");
                }}
            else{
            
            
                JOptionPane.showMessageDialog(null, "Cliente no Encontrado, Se Buscara Servicio... :)");
            }
            
            
            
            
            

            ingbuscar.setText(null);
            
        } catch (InstantiationException ex) {
            Logger.getLogger(Formulario.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Error "+ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Formulario.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Error "+ex);
        } catch (SQLException ex) {
            Logger.getLogger(Formulario.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Error "+ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Formulario.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Error "+ex);
        }
    }

Los archivos están aquí:

https://mega.co.nz/#!zBYzHDSD!orUJXOvNCESERpx1Ko2FDb1F34Rjzs0VI2zTrGs9VtA (https://mega.co.nz/#!zBYzHDSD!orUJXOvNCESERpx1Ko2FDb1F34Rjzs0VI2zTrGs9VtA)

FX: Archivo Netbeans
MySQL: Base de Datos (esta dentro se llama bbdd)


Título: Re: Problemas con next()
Publicado por: Chuidiang en 20 Mayo 2015, 20:51 pm
Hola:

registro.next() además de devolver true ofalse, mueve al siguiente registro, por lo que con

if (registro.next())

estás desperdiciando el primer registro. Si solo hay uno, el siguiente

while (registro.next()==true)

será false.

No necesitas el if. Si quieres sacar un aviso no resultados, verifica simplemente si al terminar el bucle el contador i es cero.

Se bueno.


Título: Re: Problemas con next()
Publicado por: Nafko en 20 Mayo 2015, 21:55 pm
Muchas gracias ahora entiendo el problema al entrar al primer next() tiraba un true pero movía al siguiente registro que estaba en false y por eso no entraba en el ciclo while pero como podría hacer una validación para poder hacer correr otro método de búsqueda por servicio si el registro viene en false, porque si lo hago por el if else me cambiaría de true a false???


Título: Re: Problemas con next()
Publicado por: Chuidiang en 21 Mayo 2015, 20:07 pm
Hola:

Lo que te he comentado, al final del bucle mira el contador i, si es cero, es que el bucle no ha entrado y por tanto no había registros.

Se bueno.


Título: Re: Problemas con next()
Publicado por: Nafko en 21 Mayo 2015, 21:03 pm
Gracias al parecer no había captado eso muchas gracias :)

Esto es lo que hice:


Código:
                int i=0;
               
                while (registro.next()) {
                    JOptionPane.showMessageDialog(null, "Cliente fue Encontrado");
                    modelo.addRow(new Object[1]);
                    Resultado.setValueAt(registro.getString("Nombre"),i,0);
                    Resultado.setValueAt(registro.getString("Apellido"),i,1);
                    Resultado.setValueAt(registro.getString("Rut"),i,2);
                    Resultado.setValueAt(registro.getString("Cliente"),i,3);
                    Resultado.setValueAt(registro.getString("Servicio"),i,4);
                    Resultado.setValueAt(registro.getString("Medidor"),i,5);
                    Resultado.setValueAt(registro.getString("Costo"),i,6);
                    Resultado.setValueAt(registro.getString("Total"),i,7);
                    i++;
                         
                }
               
                if (i==0) {
                    ConexionBD conn=new ConexionBD();
            ResultSet registroCS=conn.ConsultarServicio(Integer.parseInt(String.valueOf(ingbuscar.getText())));
               
                JOptionPane.showMessageDialog(null, "Se Buscara por Servicio");
               
                    while (registroCS.next()) {
                    JOptionPane.showMessageDialog(null, "Cliente fue Encontrado");
                    modelo.addRow(new Object[1]);
                    Resultado.setValueAt(registroCS.getString("Nombre"),i,0);
                    Resultado.setValueAt(registroCS.getString("Apellido"),i,1);
                    Resultado.setValueAt(registroCS.getString("Rut"),i,2);
                    Resultado.setValueAt(registroCS.getString("Cliente"),i,3);
                    Resultado.setValueAt(registroCS.getString("Servicio"),i,4);
                    Resultado.setValueAt(registroCS.getString("Medidor"),i,5);
                    Resultado.setValueAt(registroCS.getString("Costo"),i,6);
                    Resultado.setValueAt(registroCS.getString("Total"),i,7);
                    i++;
                    }
               
                }