2016-10-01 33 views
-1

我寫了下面的代碼來更新數據庫中的一些信息使用SQLite。這個想法是在條目已經存在的情況下更新一個值(userAverageTime),或者如果條目尚不存在,則創建一個新記錄。最快的方式來更新Android上的SQLite數據庫(或添加記錄,如果它還不存在)

下面是代碼:

public void updateTableLevelsAverageTime(DatabaseOperations dop, LinkedList<Level> levels) { 
    SQLiteDatabase SQ = dop.getWritableDatabase(); 
    String selection = KEY_NUMBERS + " = ?"; 
    for (Level level: levels) { 
     String[] args = {level.toString()}; 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_AVERAGE_TIME, level.getAverageTime()); 
     int result = SQ.update(TABLE_LEVELS, cv, selection, args); 
     if (result == 0) { 
      //If the entry doesn't exist, it must be a new level... thus add it with 0 as userseconds 
      ContentValues cv2 = new ContentValues(); 
      cv2.put(KEY_NUMBERS, level.toString()); 
      cv2.put(KEY_AVERAGE_TIME, level.getAverageTime()); 
      cv2.put(KEY_USER_TIME, 0); 
      SQ.insert(TABLE_LEVELS, null, cv2); 
      Log.d("Database operations", "Row added"); 
     } 
     else { 
      Log.d("Database operations", "Row updated"); 
     } 
    } 
    SQ.close(); 
} 

(KEY _ ***是在代碼中其他地方定義的列名),

我想知道,這是最好的辦法,但。代碼需要相當一段時間才能運行。

我讀過的地方,如果你想更新數據,你可以批量做這個。但是,如果只想在記錄存在的情況下更新以及在不存在時添加記錄,那麼是否也可以這樣做?

回答

0

您可以使用REPLACE INTO命令,你會使用INSERT INTO之一,爲了不檢查記錄存在並執行相應的UPDATEINSERT INTO命令。
SQLite將首先刪除該行(如果存在),然後重新插入它。

因此,您可以編寫一個execSQL()指令,該指令使用REPLACE INTO命令,您可以在其中執行查詢,然後確定下一個要執行的命令。

REPLACE INTO將幫助您跳過所有的邏輯。
我覺得它非常有用。

相關問題