Problemas con next()

Iniciado por Nafko, 20 Mayo 2015, 01:43 AM

0 Miembros y 1 Visitante están viendo este tema.

Nafko

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


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

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

Chuidiang

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.

Nafko

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???

Chuidiang

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.

Nafko

#4
Gracias al parecer no había captado eso muchas gracias :)

Esto es lo que hice:



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