Android: Bulk Insert, cuando InsertHelper está obsoleto

Hay muchas respuestas y tutoriales usando InsertHelper para hacer rápida inserción de volumen en SQLiteDatabase.
Pero InsertHelper está obsoleto a partir de la API 17.

¿Cuál es ahora el método más rápido para insertar grandes conjuntos de datos en Android SQLite?

Hasta ahora mi mayor preocupación es que SQLiteStatement no es muy cómodo para trabajar, donde InsertHelper tenía columnas vinculantes y valores de enlace, que era un poco trivial.

4 Solutions collect form web for “Android: Bulk Insert, cuando InsertHelper está obsoleto”

SQLiteStatement también tiene métodos vinculantes, extiende SQLiteProgram .

Simplemente ejecútelo en la transacción:

final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); final SQLiteStatement statement = db.compileStatement(INSERT_QUERY); db.beginTransaction(); try { for(MyBean bean : list){ statement.clearBindings(); statement.bindString(1, bean.getName()); // rest of bindings statement.execute(); //or executeInsert() if id is needed } db.setTransactionSuccessful(); } finally { db.endTransaction(); } 

EDITAR

No puedo encontrar la solución agradable en SQLiteQueryBuilder pero es tan simple como:

 final static String INSERT_QUERY = createInsert(DbSchema.TABLE_NAME, new String[]{DbSchema.NAME, DbSchema.TITLE, DbSchema.PHONE}); static public String createInsert(final String tableName, final String[] columnNames) { if (tableName == null || columnNames == null || columnNames.length == 0) { throw new IllegalArgumentException(); } final StringBuilder s = new StringBuilder(); s.append("INSERT INTO ").append(tableName).append(" ("); for (String column : columnNames) { s.append(column).append(" ,"); } int length = s.length(); s.delete(length - 2, length); s.append(") VALUES( "); for (int i = 0; i < columnNames.length; i++) { s.append(" ? ,"); } length = s.length(); s.delete(length - 2, length); s.append(")"); return s.toString(); } 

Te recomiendo que eche un vistazo a google IO aplicación, especialmente el proveedor , así es como desarrolladores de google hacer esto, por lo que puede estar seguro de que esta es la forma correcta.

Yo estaba enfrentando el mismo problema y no podía encontrar cómo SQLiteStatement fácilmente podría sustituir DatabaseUtils.InsertHelper como usted necesita para construir la consulta SQL a mano.

Terminé usando SQLiteDatabase.insertOrThrow que puede reemplazar fácilmente el código existente. Sólo tuve que añadir a veces un hack columna nula para manejar los casos en los que insertar vacío ContentValues.

Sí, la declaración no se compila para ser reutilizada más tarde, pero la construcción de una consulta INSERT a mano y la vinculación de todos los parámetros es demasiado dolor. Estaría interesado en saber cuánto afectará este rendimiento de impacto al conjunto de datos de grandes volúmenes insertados (InsertHelper solo se obsoleta) en caso de que modifique su código.

Acabo de hacer una copia de seguridad de la clase por defecto manteniendo sólo el código relacionado con InsertHelper, echa un vistazo a esta idea .

Estoy bastante seguro de que esto fue obsoleto para limpiar las clases SDK utils. Lo que queda de mi clase es sólo usar cosas no obsoletas.

  • (1) cerca de "AUTO_INCREMENT": error de sintaxis al alterar la tabla
  • SQLiteDiskIOException: error de E / S de disco al crear base de datos
  • Android permiso de creación de base de datos
  • Cómo actualizar la columna con ORMLite
  • Acceso a una base de datos .sqlite descargada determinada en el almacenamiento externo desde una aplicación de Android
  • Diseño general de la aplicación (IntentService / ContentProvider / AsyncTask)
  • No se puede copiar la base de datos SQLite de los activos
  • Cómo recuperar datos de la base de datos sqlite en android y mostrarla en TextView
  • Android insertWithOnConflict devolviendo el valor equivocado
  • SQLite de Android CursorIndexOutOfBounds
  • Idioma para cerrar un cursor
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.