2016-02-28 55 views
0

我有一個與我的應用程序sqlite表...但將需要儘快添加/刪除大量數據集。我有很多選擇。現在,我有大約35,000行,我可以在大約15秒內更新。我更喜歡更快的東西。本質上只需要一列作爲我的輔助文本。將大量數據導入到android上的sqlite數據庫 - 時間太長。需要替代品

現在,用戶下載一個txt文件,然後該文件被傳遞給下面的方法。

public boolean installLanguageFile(String resourceId) { 

     SQLiteDatabase db; 
     db = new DataBaseHelper(getContext()).getWritableDatabase(); 
     try { 

      File mFile = new File(getActivity().getFilesDir() + resourceId); 

      InputStream insertsStream = new FileInputStream(mFile); 
      BufferedReader insertReader = new BufferedReader(new InputStreamReader(insertsStream)); 

      long lengthOfFile = 34504; 
      long total = 0; 
      int rowId = 1; 

      String sql = "UPDATE Story_Data SET text2 = ('?') WHERE _id = ?"; 
      db.beginTransaction(); 
      SQLiteStatement stmt = db.compileStatement(sql); 
      while (insertReader.ready()) { 
       total += rowId; 
       stmt.bindString(1, insertReader.readLine()); 
       stmt.execute(); 
       stmt.clearBindings(); 
       publishProgress("" + (rowId * 100/lengthOfFile)); 
       rowId++; 
      } 

      db.setTransactionSuccessful(); 
      db.endTransaction(); 

      insertReader.close(); 

      //mCallback.reloadView(); 
      return true; 

     } catch (IOException e) { 
      e.printStackTrace(); 
      return false; 
     } 

    } 
+0

是否存在本地更改,或者是否是來自服務器的所有數據?如果它全部來自服務器,最快的方法就是下載一個新的數據庫文件。 –

+0

如果由於其他表具有用戶輸入而無法執行此操作,但此表來自服務器 - 刪除此表並重新創建它,所有插入操作可能會比更新每一行更快。但是這需要您進行基準測試和複查。 –

+1

如果您不在每次迭代中發佈進度,您是否嘗試過快多快?對於初學者嘗試完全刪除它 –

回答

0

更新所有到位的行需要數據庫移動大量數據。
如果可能,請先刪除所有舊行,然後插入所有新行。

,最快的方式是避免文本文件:船舶新的數據作爲一個數據庫文件,ATTACH更新文件到主數據庫,然後將數據在一個聲明中這樣拷貝過來:

INSERT INTO main.Story_Data(ID, text2) SELECT ID, text2 FROM updateDB.Story_Data; 
+0

謝謝。這工作...幾乎立即。但是,我有一個問題......原始表格有其他幾列。所有這些保持不變。 Id,章節,text1,text2(空白)。當我從只有文本(沒有ID)的新數據庫複製時,它只是追加到34500之後,而不是進入text1旁邊的實際列(我想保留兩個文本)。 –

+0

你別無選擇,只能更新。或者,使用兩個始終連接的表。 –

+0

如果您有任何建議,我非常接近。下面的命令可以工作,但所有的行都是一樣的。 UPDATE Story_Data set text2 =(SELECT text FROM updateDB.Story_Data) –

相關問題