Java + Mysql consulta lenta

Iniciado por rigoxls, 13 Agosto 2009, 20:11 PM

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

rigoxls

Saludos comunidad

Escribo esta vez porque tengo una aplicacion que conecta a una base de datos para guardar información de acuerdo a un formulario, o simplemente consulta en una tabla los registros que hay...

Es un .jar y la conexion es a una base de datos local de mysql, mm funciona bien, el lio es que cuando oprimo el boton que ejecuta la consulta, el proceso me tarda demasiado, al rededor de 30 segundos hasta que me muestra la consulta en pantalla...

No se si estoy haciendo una subrutina inecesaria o que pasa??

agergo el codigo

puntma.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){

modelo = new DefaultTableModel();
    tabla = new JTable(modelo);
   
puntamay.add(tabla);



try
        {
       
            DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());           
       
           
            Connection con = DriverManager.getConnection (
                "jdbc:mysql://localhost/tetris","root", "rigoxls");
               
               
                Statement s = con.createStatement();
                ResultSet rs = s.executeQuery("select * from info where puntaje != '0' order by puntaje desc");
               
               
                               
               
// Creamos las columnas.
modelo.addColumn("Id");
modelo.addColumn("Nombre");
modelo.addColumn("Puntaje");
modelo.addColumn("Lineas");
modelo.addColumn("Comentario");



// Bucle para cada resultado en la consulta
while (rs.next())
{
   
   Object [] fila = new Object[5];

 
   for (int i=0;i<5;i++)
      fila[i] = rs.getObject(i+1);

   // Se añade al modelo la fila completa.
   modelo.addRow(fila);
}


   TableColumn column = null;
for (int i = 0; i < 5; i++) {
    column = tabla.getColumnModel().getColumn(i);
    if (i == 0) {
        column.setPreferredWidth(5);
    }
    if (i == 1) {
        column.setPreferredWidth(50);
    }
    if (i == 2) {
        column.setPreferredWidth(50);
    }
    if (i == 3) {
        column.setPreferredWidth(50);
    }
    if (i == 4) {
        column.setPreferredWidth(180);
    }
}



    tabla.setPreferredScrollableViewportSize(new Dimension(400, 100));
    JScrollPane scrollPane = new JScrollPane(tabla); 
   
    puntamay.add(scrollPane);      

           
           
            con.close();
        }
        catch (Exception h)
        {
            h.printStackTrace();
        }

puntamay.setVisible(true);   

}
}
);
No hay verdades absolutas sin ciegas posiciones !!!

BEATMASTER

pues podria ser tu Pc, a mi me ha pasado que aplicaciones java con bases de datos me corren "normal" en Pcs con buenos recursos, pero en la mia que ya es algo viejita (una pentium 4 a 2Ghz) corre mas lento algo asi como lo que mencionas entre 20 y 30 segundos :P

sapito169

#2
-ese codigo no tiene ningun problema y corre a una velocidad aceptable solo si tu tabla o vista info tiene pocos registro digamos menos de 4 mill o 5 mill

-en primer lugar no es muy inteligente mandar casi toda tu tabla o vista a la memoria

-si tu tabla tiene pocos registros y aun se demora el problema lla no es de codigo el problema estaria en otra parte

si tu tabla es inmensa y no hay forma de evitarlo:
-obliga al usuario a primero filtrar la consulta y no la metas a memoria asta que el usuario alla terminado de filtrar

solucion facil y recomendad
-paginala por decir muestra de 20 en 20 registros

otra solucion dificil
-hereda del abstractablemodel y calcula los registros en tiempo de ejecucion en otras palabras no uses defaultablemodel ni llenes primero todos los registros en una coleccion para luego nuevamente recorrerlo y aserle consultas y luego motrarlo en la tabla


rigoxls

Saludos y gracias
BEATMASTER y sapito169
por responder,

Bueno, la verdad es que la tabla en la que hago la consulta si tiene pocos registros, al rededor de 10 porque la tengo como una tabla de prueba por el momento, tal vez como indica BEATMASTER dependa de mi maquina, ya que ps si es viejita me corre a 1.8 GHZ...
No hay verdades absolutas sin ciegas posiciones !!!