Как навалом вставить из Json в Sqlite в Android

Как можно вставлять массивные данные json, поступающие с сервера в базу данных Sqlite на Android, очень эффективно. Метод, который я использую сейчас, очень неэффективен, и для завершения вставки около 2000 записей требуется почти минута. Метод, которым я следую, следующий:

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); } 

Ввод, который идет, представляет собой вложенный массив Json, который сам вложен. Есть ли лучший способ быстро вставить огромный объем данных за очень короткое время?

Вы можете попробовать bulkInsert следующим образом:

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

Это только подходит, если вы собираетесь использовать только 1 URI, если вы собираетесь использовать несколько uris, вы должны использовать метод applyBatch в своем ContentResolver .

Надеюсь, поможет

Сначала создайте класс модели ваших json-данных. Используя Gson, вы можете получить данные внутри arraylist. То вы можете вставлять данные в sqlite с помощью этого arraylist. GreenDao – ваш лучший вариант для быстрой работы.

Когда вы получаете данные json в потоке, используйте следующий код:

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

В Github есть отличная библиотека под названием JSQL.

https://github.com/wenchaojiang/JSQL

Это позволяет легко сохранить строку Persist JSON и объекты JSON для вашего SQLite в базе данных.

Создайте список ваших json-данных, а затем используйте этот настраиваемый запрос для вставки массовой информации:

 /** * 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; }