2010-05-20 15 views
6

Como sabemos los desarrolladores de Android, el método SQLiteDatabaseexecSQL solo puede ejecutar una instrucción.Ejecución de consulta SQL por lotes eficiente en Android, para la base de datos de actualización

El doctor dice:

ejecutar una única sentencia SQL que no es una consulta. Por ejemplo, CREATE TABLE, DELETE, INSERT, etc. No se admiten varias instrucciones separadas por ; s.

Tengo que cargar en un lote de registros, 1000 y contando.
¿Cómo los inserto de manera eficiente?
¿Y cuál es la forma más fácil de entregar estos SQL con su apk?

Menciono que ya existe una base de datos del sistema y la ejecutaré en el evento onUpdate.

tengo este código hasta ahora:

List<String[]> li = new ArrayList<String[]>(); 
     li.add(new String[] { 
       "-1", "Stop", "0" 
     }); 
     li.add(new String[] { 
       "0", "Start", "0" 
     }); 
    /* the rest of the assign */ 
try { 
     for (String[] elem : li) { 
      getDb().execSQL(
        "INSERT INTO " + TABLENAME + " (" + _ID + "," + NAME + "," + PARSE_ORDER 
          + ") VALUES (?,?,?)", elem); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Respuesta

16

¿Cómo se montan de forma eficiente?

Utilice la transacción:

db.beginTransaction(); 
    try { 
     for(;;) { 
      db.execSQL(...); 
      } 
     db.setTransactionSuccessful(); 
    } finally { 
     db.endTransaction(); 
    } 
1

Creo que lo que tenemos es la única manera de cargar los 1000 registros, ahora, por lo que el despliegue que DB con el archivo apk, echa un vistazo a este post :

http://www.helloandroid.com/tutorials/how-have-default-database

+0

he documentado con respecto a este problema, y ​​todas las soluciones se basan exclusivamente en el hecho de que se crea una nueva base de datos. Pero necesito esto en la actualización, por lo que reemplazar la base de datos existente no es bueno, tengo que mantener las cosas del usuario allí. – Pentium10

+0

No hay ninguna razón por la que no pueda usar dos bases de datos: una base de datos de usuario y una base de datos de información estática. De esta forma, podría reemplazar completamente la base de datos estática luego de la actualización y dejar intactos los datos del usuario. –

Cuestiones relacionadas