Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problema velocidad sqlite

Estas en el tema de Problema velocidad sqlite en el foro de Bases de Datos General en Foros del Web. Buenas a todos. Tengo una bbdd sqlite, si voy añadiendo registros "poco a poco" todo funciona correctamente, pero si meto muchos registros de forma automatizada ...
  #1 (permalink)  
Antiguo 25/11/2009, 14:49
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Exclamación Problema velocidad sqlite

Buenas a todos.

Tengo una bbdd sqlite, si voy añadiendo registros "poco a poco" todo funciona correctamente, pero si meto muchos registros de forma automatizada (en un bucle for) me falla (el contenido de la excepcion.getMessage es: " ", no sirve de mucho que digamos)

¿Tengo que meter alguna pausa entre insercción e insercción?
  #2 (permalink)  
Antiguo 25/11/2009, 15:08
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Problema velocidad sqlite

Me acabo de dar cuenta que tambien me pasa al eliminar registros, si en un bucle elimino unos cuantos registros (80 o así) me falla.

gracias.
  #3 (permalink)  
Antiguo 25/11/2009, 17:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema velocidad sqlite

¿Has probado inserciones masivas?
Algo como:
Código sql:
Ver original
  1. INSERT INTO tabla
  2. VALUES(valor1, valor2, valor3, valor4, valor5),
  3.    (valor1, valor2, valor3, valor4, valor5),
  4.    (valor1, valor2, valor3, valor4, valor5),
  5.    (valor1, valor2, valor3, valor4, valor5),
  6.    (valor1, valor2, valor3, valor4, valor5),
  7.    (valor1, valor2, valor3, valor4, valor5);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 26/11/2009, 01:31
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Problema velocidad sqlite

Lo pruebo en cuanto pueda y te comento.

Si funcionase sería más complejo que un for para montar la sentencia dinámicamente en función del nº de registros...
  #5 (permalink)  
Antiguo 26/11/2009, 03:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema velocidad sqlite

Cita:
Si funcionase sería más complejo que un for para montar la sentencia dinámicamente en función del nº de registros...
Crear la sentencia sería un poco más complejo, pero la carga de datos se volvería más rápida, porque enviar tres o cuatro sentencias con 50 inserciones no es lo mismo que enviar y ejecutar separadamente 150 a 200 inserciones.
Lo que mejora es la performance de la carga.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 26/11/2009, 13:21
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Problema velocidad sqlite

Estoy lanzando la sentencia desde sqlite manager directamente, sigo tu sintaxis al pie de la letra y siempre me sale el siguiente error:

SQLITEMANGER: Likeky SQL syntax error: INSERT INTO grupo VALUES (nombre, descripcion), ('Familia', 'familiares'), ('Amigos', 'amigos y conocidos'); [near "," syntax error]
Exception Name: NS:ERROR_FAILURE
Exception Message: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE)[mozIStoreConnection.createStatement]

¿no soporta sqlite inserciones masivas?
  #7 (permalink)  
Antiguo 09/12/2009, 15:23
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Exclamación Respuesta: Problema velocidad sqlite

Por lo que sea no puedo realizar sentencias masivas a la hora de insertar o de borrar. Tendré que intentar arreglarlo de otra manera.

¿Es posible que me de error al establecer demasiadas conexiones con la base de datos porque me las deje abiertas?
He revisado el código y creo que todo esta bien, si le podéis echar un vistazo por favor...

Así es como me conecto:

Código:
private void ConectarBD() {
        try {
            Class.forName(ControladorJDBC);
            conexion = DriverManager.getConnection(baseDatos);
            instruccion = conexion.createStatement();

        } catch (SQLException excepcionSql) {
            JOptionPane.showMessageDialog(null, excepcionSql.getMessage(),
                    "Error en la base de datos", JOptionPane.ERROR_MESSAGE);
            System.exit(1);
        } catch (ClassNotFoundException claseNoEncontrada) {
            JOptionPane.showMessageDialog(null, claseNoEncontrada.getMessage(),
                    "No se encontro el controlador", JOptionPane.ERROR_MESSAGE);
            System.exit(1);
        } finally {
            try {
                instruccion.close();
                conexion.close();
            } catch (SQLException excepcionSQL) {
                JOptionPane.showMessageDialog(null, excepcionSQL.getMessage(),
                        "Error en la base de datos", JOptionPane.ERROR_MESSAGE);
                System.exit(1);
            }
        }
    }
Y así es como hago por ejemplo una insercción:

Código:
public boolean altaContacto(Contacto valor) {
        if (existeContacto(valor)) {
            return false;
        } else {
            String sql;
            Statement comando;
            sql = "insert into contactos (numeroContacto, nombre, mote, apellido1, ...) ";

            sql = sql + " values ('" + Integer.toString(nuevoNumeroContacto()) + "',";
            sql = sql + "'" + valor.getNombre() + "', ";
            sql = sql + "'" + valor.getMote() + "', ";
            sql = sql + "'" + valor.getApellido1() + "', ";
            ...
            sql = sql + "'" + valor.getEspecialidadEstudios() + "'); ";
            try {
                Class.forName(ControladorJDBC);
                conexion = DriverManager.getConnection(baseDatos);
                comando = (Statement) conexion.createStatement();
                comando.execute(sql);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage());

                return false;
            }
            return true;
        }
    }
Cuando hago inserciones masivas simplemente lo hago con un for.
Muchas gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:24.