(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..
- Inicie sesión o regístrese para enviar comentarios
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
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
PERDON EN EL JTABLE ME
PERDON EN EL JTABLE ME MUESTRA DESDE EL TERCER REGISTRO
posible solucion
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:
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:
El primer if te servira para revisar que el ResultSet tenga resultados y el do-while para hacer lo mismo con los resultados siguientes.
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
ya tienes el apuntador en el primero registro que corresponde y cuando ejecutas la sentencia
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
tampoco se ejecutaría esto:
Intenta con la propuesta de lankor.
Saludos!
Yo lo hago asi.
Yo lo hago de la siguiente forma y me funciona.
esto lo use para mostrar los datos de una factura
Se que no es la mejor de las explicaciones, pero a mi me funciona de maravilla.
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!!!