2014-10-30 8 views
-2

Я хочу вставить более 3000 записей в android SQLite, но следующий код занимает много времени для ввода данных Вот мой код.Как улучшить производительность SQLite?

public boolean addSale(Sale objSale) { 
    ContentValues values = new ContentValues(); 
    values.put(SALE_BRANCH, objSale.getBranch()); 
    values.put(SALE_SUPPLIER, objSale.getSupplier()); 
    values.put(SALE_BUYER, objSale.getBuyer()); 
    values.put(SALE_CAT1, objSale.getCat1()); 
    values.put(SALE_CAT2, objSale.getCat2()); 
    values.put(SALE_CAT3, objSale.getCat3()); 
    values.put(SALE_CAT4, objSale.getCat4()); 
    values.put(SALE_CAT5, objSale.getCat5()); 
    values.put(SALE_CAT6, objSale.getCat6()); 
    values.put(SALE_DESIGNO, objSale.getDesigNo()); 
    values.put(SALE_ITEMSIZE, objSale.getItemSize()); 
    values.put(SALE_SALEQTY, objSale.getSaleQty()); 
    values.put(SALE_STOCKQTY, objSale.getStockQty()); 
    values.put(SALE_FinalProduct, objSale.getFinalProduct()); 
    values.put(SALE_PriceRange, objSale.getPriceRange()); 
    values.put(SALE_CoreNonCore, objSale.getCoreNonCore()); 
    values.put(SALE_Color, objSale.getColor()); 
    values.put(SALE_GSLCode, objSale.getGSLCode()); 
    values.put(SALE_Wanted, objSale.getWanted()); 
    values.put(SALE_Pqty, objSale.getPqty()); 
    values.put(SALE_MRP, objSale.getMRP()); 
    values.put(SALE_PRate, objSale.getPRate()); 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.insert(TABLE_SALE, null, values); 
    db.close(); 
    return true; 
} 

И этот вопрос - это моя задача Asynk. Где я получить данные из веб-сервиса и вставьте в SQLite

protected void onPostExecute(String result) 
     { 
      try { 

       String l = result.replace("\\", ""); 
       l = l.replace("''", ""); 
       String sdsd = l.substring(1, l.length() - 1); 
       JSONArray jsonArray = new JSONArray(sdsd); 
       Log.i("JSON", "Number of surveys in feed: " +jsonArray.length()); 
       /*if(db.delSaleData()){ 

       }*/ 
        for (int i = 0; i < jsonArray.length(); i++) 
        { 
         JSONObject jsonObject = jsonArray.getJSONObject(i); 

          sl.setBranch(jsonObject.getString("Branch")); 
          sl.setSupplier(jsonObject.getString("Supplier")); 
          sl.setBuyer(jsonObject.getString("Buyer")); 
          sl.setCat1(jsonObject.getString("Cat1")); 
          sl.setCat2(jsonObject.getString("Cat2")); 
          sl.setCat3(jsonObject.getString("Cat3")); 
          sl.setCat4(jsonObject.getString("Cat4")); 
          sl.setCat5(jsonObject.getString("Cat5")); 
          sl.setCat6(jsonObject.getString("Cat6")); 
          sl.setDesigNo(jsonObject.getString("DesigNo")); 
          sl.setItemSize(jsonObject.getString("ItemSize")); 
          sl.setSaleQty(jsonObject.getString("SaleQty")); 
          sl.setStockQty(jsonObject.getString("StockQty")); 
          sl.setFinalProduct(jsonObject.getString("FinalProduct")); 
          sl.setPriceRange(jsonObject.getString("PriceRange")); 
          sl.setCoreNonCore(jsonObject.getString("CoreNonCore")); 
          sl.setColor(jsonObject.getString("Color")); 
          sl.setGSLCode(jsonObject.getString("GSLCode")); 
          sl.setWanted(jsonObject.getString("Wanted")); 
          sl.setPqty(jsonObject.getString("Pqty")); 
          sl.setMRP(jsonObject.getString("MRP")); 
          sl.setPRate(jsonObject.getString("PRate")); 

          if(db.addSale(sl)) 
          { 
           //Toast.makeText(getApplicationContext(), " Insert.." , Toast.LENGTH_SHORT).show(); 
          } 
        } 

        setData(); 


       } catch (Exception e) { 
        e.printStackTrace(); 
      } 
      dialog.dismiss(); 
      setTableData("All"); 


     } 
+0

Проверьте это .. http://www.techrepublic.com/blog/software-engineer/turbocharge-your-sqlite-inserts-on-android/ –

+0

Do вы делаете это только один раз, когда приложение запускается первым? – Simas

+0

Это что-то не так в этой que ..? Если нет, то почему проголосовали отрицательно? –

ответ

-1

Используйте Async класс. Выполняйте операцию onBackground, а не в основном потоке пользовательского интерфейса.

UPDATE

На вашем коде, вы вставляете SQLite через onPost, не onBackground. onPost делайте что-нибудь в потоке пользовательского интерфейса, а onBackground делайте это на отдельной (фоновой) теме, чтобы он не влиял на пользовательский интерфейс. Таким образом, переместить код операции в onBackground.

+0

Это улучшает производительность SQLite? – Simas

+0

Да .. все вставки выполняются в Asynk Task. –

+0

@ user3249477 да, он заставляет поток пользовательского интерфейса работать, как обычно, поэтому пользователь не замечает, что вы вставляете БД. Помните, мы говорим о тысячах строк здесь. –

1

Не открывайте и не закрывайте базу данных каждый раз, когда вы хотите сделать вставку. Откройте его один раз, а затем закройте его при выходе из приложения.

+0

+1, вы также должны это проверить. –

2

использовать SQLiteStatement, например:

private void bulkInsertRecords(String[] records) { 
      String sql = "INSERT INTO "+ SAMPLE_TABLE_NAME +" VALUES (?,?,?);"; 
      SQLiteStatement statement = sampleDB.compileStatement(sql); //Este é o prepare 
      sampleDB.beginTransaction(); 
      for (int i = 0; i<records.length; i++) { 
        statement.clearBindings(); 
        statement.bindString(1, records[0]); 
        statement.bindString(2, records[1]); 
        statement.bindString(3, records[2]); 
        statement.execute(); 
      } 
      sampleDB.setTransactionSuccessful(); 
      sampleDB.endTransaction(); 
} 
+0

Делает это быстрее? –

+0

Действительно ... его сделать ввод данных быстрее .. ?? –

+0

да, но прочитайте эту ссылку, чтобы получить дополнительную информацию http://tech.vg.no/2011/04/04/speeding-up-sqlite-insert-operations/ – Ludger

Смежные вопросы