Cómo insertar a granel de Json a Sqlite en Android

¿Cómo es posible insertar datos de json en masa procedentes del servidor en la base de datos Sqlite en Android de manera muy eficiente. El método que uso ahora es muy ineficiente y se tarda casi un minuto para completar la inserción de alrededor de 2000 registros. El método que estoy siguiendo es:

for (int i = 0; i < jsonObj.length(); i++) { JSONObject itemObj = (JSONObject) jsonObj.get(i); ContentValues value1 = new ContentValues(); ContentValues value2 = new ContentValues(); value2.put(DbHelper.BusinessID,itemObj.getString("BusinessID")); value2.put(DbHelper.LocationID,itemObj.getString("LocationID")); JSONArray list = itemObj.getJSONArray("OfficeDetails"); if (list != null) { for (int k = 0; k < list.length(); k++) { JSONObject elem = list.getJSONObject(k); if (elem != null) { try { value1.put(DbHelper.Office_Code,elem.getInt("Office_Code")); value1.put(DbHelper.Office_District,elem.getInt("Office_District")); db.insert(DbHelper.MessageDetail,null, value1); } catch (Exception e) { e.printStackTrace(); } } db.insert(DbHelper.Message,null, value2); } 

La entrada que viene es una matriz Json anidada, que por sí misma está anidada. ¿Hay una mejor manera de insertar rápidamente gran cantidad de datos en muy poco tiempo?

4 Solutions collect form web for “Cómo insertar a granel de Json a Sqlite en Android”

Usted podría intentar bulkInsert como el siguiente:

 ContentResolver.bulkInsert (Uri url, ContentValues[] values); //Array of rows to be inserted 

Esto sólo se ajusta si va a utilizar sólo 1 URI, si va a utilizar múltiples uris, debe utilizar el método applyBatch en su ContentResolver .

Espero eso ayude

Primero cree la clase de modelo de sus datos json. Usando Gson puede obtener datos dentro de un arraylist. entonces usted puede insertar datos en sqlite usando ese arraylist. GreenDao es su mejor opción para un rendimiento rápido.

cuando reciba datos json en una secuencia, utilice el siguiente código:

 Type collectionType = new TypeToken<ArrayList<your_model>>() {}.getType(); Gson gson = new Gson(); ArrayList<your_model> yourModelList = gson.fromJson(stream, collectionType); 

Hay una excelente biblioteca llamada JSQL disponible en Github.

https://github.com/wenchaojiang/JSQL

Esto hace que sea tan fácil guardar la cadena JSON Persist y los objetos JSON a su SQLite en la base de datos.

Cree una lista de sus datos json y utilice esta consulta personalizada para la inserción de datos masivos:

 /** * insert the bulk data into database * * @param query to insert data into table * @param parameter data to be inserted into table * @return number of rows got inserted */ protected int insertBulk(String query, String[][] parameter) throws SQLiteConstraintException, SQLiteException { int rowCount = -1; SQLiteStatement statement = mSqldb.compileStatement(query); mSqldb.beginTransaction(); try { for (int index = 0; index < parameter.length; index++) { statement.bindAllArgsAsStrings(parameter[index]); statement.execute(); statement.clearBindings(); } rowCount = parameter.length; } finally { mSqldb.setTransactionSuccessful(); mSqldb.endTransaction(); } return rowCount; } 
  • SQLiteDiskIOException: error de E / S de disco (código 3850)
  • Crear la función definida por el usuario en sqlite android?
  • SQLite - insertar una cadena con nuevas líneas en la base de datos desde el archivo csv
  • La aplicación no cerró el cursor o el objeto de base de datos que se abrió aquí:
  • ¿Hay alguna forma más rápida de iterar a través de las filas de la consulta Sqlite?
  • Búsqueda SQLite FTS4 con caracteres especiales
  • Lea el error de la carpeta sqlite from assets
  • Android greenDAO Almacenamiento Números de punto flotante incorrectos
  • ¿Cómo acceder a una base de datos sqlite existente en Android?
  • implementar el marco de sincronización de Microsoft con el dispositivo Android
  • Problemas para obtener Calendar.WEEK_OF_YEAR
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.