2014-10-16 2 views
5

서버의 대량 json 데이터를 Android의 Sqlite 데이터베이스에 매우 효율적으로 삽입하는 방법은 무엇입니까? 지금 사용하는 방법은 매우 비효율적이며 약 2000 개의 레코드를 삽입하는 데 거의 1 분이 걸립니다. 나는 다음과 같은 오전 방법은 다음과 같습니다Json에서 Android의 Sqlite로 대량 삽입하는 방법

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 배열입니다. 매우 짧은 시간에 방대한 양의 데이터를 신속하게 삽입 할 수있는 더 좋은 방법이 있습니까?

답변

0

당신은 다음과 같은 bulkInsert을 시도 할 수 있습니다 : 당신은 당신이 여러 URI를 사용하려는 경우, 단 1 URI를 사용하려는 경우

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

이는 맞는, 당신은 당신의 ContentResolverapplyBatch 방법을 사용해야합니다.

+0

예를 들려 줄 수 있습니까? 우리는 무엇입니까? – Geevarghese

-1

이 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; 
} 
+0

트랜잭션이 올바르게 처리되지 않습니다. 오류가 발생하면'setTransactionSuccessful()'을 호출하면 안됩니다. –

+0

@cl에 감사드립니다. 나는 이것을 점검 할 것이다 :) – samsad

0

먼저 당신의 JSON 데이터의 모델 클래스를 만들 수 있습니다. Gson을 사용하면 arraylist 내부에서 데이터를 얻을 수 있습니다. 그 arraylist를 사용하여 sqlite에 데이터를 삽입 할 수 있습니다. GreenDao는 빠른 성능을위한 최상의 옵션입니다.

당신은, 사용이 코드를 다음 스트림에서 JSON 데이터를받을 때 :

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

일단 arraylist를 만들면 db로 그것을 어떻게 삽입 할 것인가? 이미 사용한 방법을 사용해야합니까? – Geevarghese

+0

DB 도우미를 사용해야합니다. ORMlite는 매우 사용하기 쉽습니다. GreenDAO는 또 다른 옵션입니다. 그 greendao를 사용하여 쉽게. 그러나 그것에 대해 읽었습니다. 이해해. 훨씬 빠릅니다. – TheAndroidFreak

0

Github에서의 JSQL 사용할 수라는 훌륭한 라이브러리가있다.

https://github.com/wenchaojiang/JSQL

그것은 너무 쉽게 JSON 문자열을 지속 저장하고 JSON이 데이터베이스에 SQLite는에 개체 수 있습니다.

관련 문제