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; } 
  • Sqlite convert 'dd.MM.yyyy' formated String hasta la fecha
  • ¿Existe un caché de memoria para SQLite en Android y cómo liberarlo o borrarlo?
  • Android: inserta una matriz de imágenes de mapa de bits en la base de datos SQLite
  • Android busca base de datos SQLite en el teléfono
  • SQLite Context.MODE_PRIVATE
  • Consulta de ORMLite para la fecha
  • INSERT de SQLite de SQL
  • Android Sqlite - "No hay tal tabla" Error
  • Establecer el valor predeterminado de una columna de enteros SQLite
  • Número máximo de filas en una tabla sqlite?
  • Obtener cadena, fecha, hora y int de sqlite base de datos en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.