2014-10-16 3 views
5

एंड्रॉइड में SQL से SQL सर्वर में सर्वर से आने वाले थोक जेसन डेटा को बहुत कुशलतापूर्वक कैसे सम्मिलित करना संभव है। जिस विधि का मैं उपयोग करता हूं वह बहुत अक्षम है और इसमें लगभग 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 सारणी, जो अपने आप नीडिंत है है। क्या बहुत कम समय में डेटा की भारी मात्रा में तेजी से डालने का कोई बेहतर तरीका है?

उत्तर

0

आप निम्नलिखित के रूप में bulkInsert की कोशिश कर सकते:

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

यह केवल फिट बैठता है आप केवल 1 URI का उपयोग करना, आप कई यूआरआई उपयोग करने के लिए जा रहे हैं जा रहे हैं, तो आप अपने ContentResolver में applyBatch विधि का उपयोग करना चाहिए।

आशा है कि यह मदद करता है

+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

लेनदेन सही ढंग से संभाला नहीं है; जब कोई त्रुटि होती है, तो आपको 'setTransaction असफल() 'कॉल नहीं करना चाहिए। –

+0

धन्यवाद @cl। मैं इसे जांचूंगा :) – samsad

0

सबसे पहले अपने json डेटा की मॉडल वर्ग पैदा करते हैं। जीसन का उपयोग करके आप एक सरणी सूची के अंदर डेटा प्राप्त कर सकते हैं। तो आप उस सरणी सूची का उपयोग कर SQLite में डेटा सम्मिलित कर सकते हैं। ग्रीनडाओ तेज़ प्रदर्शन के लिए आपका सबसे अच्छा विकल्प है।

तो आपको स्ट्रीम में json डेटा प्राप्त करते हैं, कोड निम्नलिखित उपयोग:

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

एक बार जब मैं सरणीसूची बनाउंगा, तो मैं इसे डीबी में कैसे डालूं? क्या मुझे उस विधि का उपयोग करना चाहिए जिसका मैंने पहले से उपयोग किया है? – Geevarghese

+0

आपको डीबी सहायक का उपयोग करने की आवश्यकता है। ORMlite का उपयोग करना बहुत आसान है। ग्रीनडाओ एक और विकल्प है। Greendao का उपयोग करना आसान है। लेकिन आपने इसके बारे में पढ़ा है। आप इसे प्राप्त करते हैं। यह बहुत तेज़ है। – TheAndroidFreak

0

एक उत्कृष्ट पुस्तकालय Github में JSQL उपलब्ध बुलाया है।

https://github.com/wenchaojiang/JSQL

इसका यह इतना आसान भी बनी रहती है JSON स्ट्रिंग को बचाने के लिए और JSON डेटाबेस पर अपने SQLite के लिए ऑब्जेक्ट्स बना देता है।

संबंधित मुद्दे