(duda)Dato curioso entre java y mysql

hola a todos me pasa algo extraño, Cuando, obtengo los resultados de la base de datos tanto en un JTable como en otro componente de tipo lista, solo me muestra del segundo registro en adelante, nunca me muestra el primer registro no se a que se debe, son de ese tipo de cosas que piensas que solo te pasan a ti jaja espero que no sea asi Que alguien me ayuuude!!! de antemano gracias..

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.

Suena a que en algún lado

Suena a que en algún lado estás poniendo como indice inicial 1 en vez de 0.

Sueeena, pero así de adivinar pues está dificil.

p.d. Este post no tiene porque ir en JavaMexico 2.0

Imagen de catf2000

no encuentro donde....

AQUI HAGO LA CONEXION A LA BASE

package GUI;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import javax.swing.JOptionPane;

public class conexion {

private final static String drv = "com.mysql.jdbc.Driver";
private final static String db = "jdbc:mysql://localhost:9999/******";
private final static String user = "******";
private final static String pass = "******";

private Connection ct = null;
private Statement st = null;

public conexion(){

try{

Class.forName(drv).newInstance();
ct = DriverManager.getConnection(db,user,pass);
st = ct.createStatement();

//JOptionPane.showMessageDialog(null,"Conexion exitosa \n","CONECTADO",JOptionPane.INFORMATION_MESSAGE);

}catch(Exception e){

JOptionPane.showMessageDialog(null,"No se pudo conectar \n","ERROR",JOptionPane.ERROR_MESSAGE);

}
}

public Statement getSt() {
return st;
}

public void setSt(Statement st) {
this.st = st;
}

}

//AQUI HAGO UNA CONSULTA

try{

ResultSet aux = cn.getSt().executeQuery("SELECT * FROM restaurant.insumos");

if(!aux.next()){

JOptionPane.showMessageDialog(null,"Tabla Vacia \n","Sin datos",JOptionPane.INFORMATION_MESSAGE);

}

else if(aux.next()){

while(aux.next()){
Object fila[] = {aux.getString(1),aux.getString(2),aux.getString(3),aux.getString(4),aux.getString(5),
aux.getString(6),aux.getString(7),aux.getString(8),aux.getString(9),aux.getString(10),
aux.getString(11),aux.getString(12),aux.getString(13),aux.getString(14),aux.getString(15),
aux.getString(16),aux.getString(17),aux.getString(18),aux.getString(19),aux.getString(20),
aux.getString(21),aux.getString(22),aux.getString(23)}; //CON EL ARRAY FILA COLOCO LOS DATOS OBTENIDOS EN LA TABLA

del.add((Integer)aux.getObject(1));
dtm.addRow(fila); //AQUI ADIERO LOS DATOS A LA TABLA
}
}

}catch(Exception e){

JOptionPane.showMessageDialog(null,"Tabla Vacia \n","Sin datos",JOptionPane.INFORMATION_MESSAGE);
}

ESTOS SON LOS DATOS DE LA TABLA INSUMOS DE LA BASE BDE DATOS

1 cocacola gramos 600ml cocacola company 4 5 6 7 8 9 10 11 12 13 15 16 17 18 bebida 19 20 company
2 cocacola gramos 600ml cocacola company 4 5 6 7 8 9 10 11 12 13 15 16 17 18 bebida 19 20 company
7 pizza gramos q q q q q q q q q q q q q q q q q q q q
9 jhjtuihj litros q q q q q q q q q q q q q q q q q q q q
11 njulio litros q q q q q q q q q q q q q q q q q q q q

Y ESTOS SON LOS DATOS QUE ME MUESTRA EN EL JTABLE

7 pizza gramos q q q q q q q q q q q q q q q q q q q q
9 jhjtuihj litros q q q q q q q q q q q q q q q q q q q q
11 njulio litros q q q q q q q q q q q q q q q q q q q q

COMO SE DARAN CUENTA NO ME MUESTRA LOS DOS PRIMEROS REGISTROS DE LA BASE

SE ME OLVIDABA ESTE ES EL CODIGO DE LA TABLA

dtm = new DefaultTableModel();
dtm.setColumnIdentifiers(titulos);
tabla = new JTable(dtm);
tabla.setBounds(0, 50, 1000, 200);
scrollTabla = new JScrollPane(tabla);
scrollTabla.setBounds(0, 0, 1000, 250);

NOSE EN DONDE DEBI DEIFNIR EL INDEX POR QUE EN LOS JCOMBOX NO ME MUESTRAN EL PRIMER REGISTRO DE LA BASE Y EN EL JTABLE SOLO MUESTRA DESDE EL SEGUNDO REGISTRO EN ADELANTE

Imagen de catf2000

PERDON EN EL JTABLE ME

PERDON EN EL JTABLE ME MUESTRA DESDE EL TERCER REGISTRO

posible solucion

...
        if(!aux.next()){

JOptionPane.showMessageDialog(null,"Tabla Vacia \n","Sin datos",JOptionPane.INFORMATION_MESSAGE);

}

else if(aux.next()){

while(aux.next()){
...

presiento que esos tres next() que haces mueven el cursor del resultset y se saltan las filas que necesitas
por que no intentas averiguar si el resultset tiene datos usando getFetchSize() en lugar de usar el metodo next(), o bien usar isBeforeFirst() y isAfterLast() al mismo tiempo.

Igual puedes comprobarlo si usas isFirst() antes de entrar al ciclo while y veras si el cursor se movio.

p.d. podrias colocar tu codigo entre tags de code, asi sera mas legible

Problema con tantos next()

El problema es que ejecutas muchos next() en tu código:

if(!aux.next()){
  JOptionPane.showMessageDialog(null,"Tabla Vacia \n","Sin datos",JOptionPane.INFORMATION_MESSAGE);
} else if(aux.next()){
  while(aux.next()){
    .
    .
    .
  }
}

Veamoslo de esta manera, cuando ejecutas una consulta obtienes un objeto ResultSet, si el objeto tiene resultados y se ejecuta el metodo next(), lo que pasa es que te posicionas en el primer resultado de tu consulta, si vuelves a ejecutar el metodo next() y tu ResultSet aun tiene resultados te manda a la siguiente posicion, y asi hasta llegar al final. Lo que estas haciendo es que estas avanzando de posiciones en tu resultado sin hacer nada, yo lo haria de la siguiente manera:

if (aux.next()) {
  do {
    // Hacer algo con el registro obtenido
  } while(aux.next());
} else {
   // Hacer algo si la consulta no devuelve resultados
}

El primer if te servira para revisar que el ResultSet tenga resultados y el do-while para hacer lo mismo con los resultados siguientes.

Imagen de juan.cazarez

next() en Resultset

Estoy de acuerdo con lankor, el que no obtengas el primer registro cuando tu consulta arroja datos es porque en la línea
 else if( aux.next() )
ya tienes el apuntador en el primero registro que corresponde y cuando ejecutas la sentencia
 while(aux.next())
tu apuntador se mueve al siguiente registro, incluso pienso que si tu búsqueda lanzara un solo registro no verías ningún efecto, es decir, no ejecutaría la sentencia
 JOptionPane.showMessageDialog(null,"Tabla Vacia \n","Sin datos",JOptionPane.INFORMATION_MESSAGE);  
tampoco se ejecutaría esto:

 Object fila[] = {aux.getString(1),aux.getString(2),aux.getString(3),aux.getString(4),aux.getString(5),
aux.getString(6),aux.getString(7),aux.getString(8),aux.getString(9),aux.getString(10),
aux.getString(11),aux.getString(12),aux.getString(13),aux.getString(14),aux.getString(15),
aux.getString(16),aux.getString(17),aux.getString(18),aux.getString(19),aux.getString(20),
aux.getString(21),aux.getString(22),aux.getString(23)}; //CON EL ARRAY FILA COLOCO LOS DATOS OBTENIDOS EN LA TABLA
del.add((Integer)aux.getObject(1));
dtm.addRow(fila); //AQUI ADIERO LOS DATOS A LA TABLA

Intenta con la propuesta de lankor.

Saludos!

Imagen de n00b

Yo lo hago asi.

Yo lo hago de la siguiente forma y me funciona.

esto lo use para mostrar los datos de una factura

       int fila=0; //Variable que controla el numero de lafila actual
       
         try
            {
                while(resultSet.next())// Se va iterando(no se si es la exprecion correcta) sobre el resultSet
                {
               String[] ad = new String[4];
               modeloTabla.addRow(ad); // Se van añadiendo filas a la tabla mientras se siga iterando sobre el resultset
                   
               //Se establese el resultado en la fila actual y la columna indicada (se comienza de 0) de la tabla.
               // Tambien puedes mandar como parametro el nobre de la tabla ej. resultSet.getInt("ID")
                    modeloTabla.setValueAt(resultSet.getInt(1), fila, 0);    
                    modeloTabla.setValueAt(resultSet.getString(2), fila, 1);
                    modeloTabla.setValueAt(resultSet.getFloat(3)), fila, 2);
                    modeloTabla.setValueAt(resultSetgetFloat(4)), fila, 3);
                   
                    fila++;
                   
                }
               
            }
            catch(SQLException e)
            {
                JOptionPane.showMessageDialog(null,e.getMessage());
            }

Se que no es la mejor de las explicaciones, pero a mi me funciona de maravilla.

Imagen de catf2000

Muchas Gracias

que a todo dar son ustedes, correjire este detalle con los next()...

Cuando....

Cuando coloques codigo en tus post metelo entre las tags  ...

Saludos!!!