2012-08-02 33 views

回答

1

你不需要玩ID以創建一個FIFO邏輯。最好的辦法是在表中添加另一列作爲DATETIME,該列自動插入當前時間戳,這將幫助您按照此列的升序來選擇記錄。你的新列應該是這樣的:

DateAdded DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP 

確保當過你插入新記錄,你必須在這個表做一個COUNT檢查的總記錄,並在必要時刪除關於最早的記錄,以DateAdded。此外,您可以在選擇查詢中使用LIMIT和/或MAX來刪除最早的記錄。

+0

謝謝你的幫助。我採用了類似的方法來優化代碼。 – Shannon 2012-08-03 07:25:31

+0

請您詳細解釋一下嗎? – 2015-03-18 11:19:47

0

如果日期時間類型列中尚未包含日期時間類型列,並將其設置爲每個插入點上的「now」,則向其添加日期時間類型列。然後在每個插入選擇所有限制設置爲50按日期排序。選擇最後一個項目並運行刪除查詢以刪除比最後一個項目更早的一切。

0

是否必須使用sqlite?你可以使用文件處理?您可以使用簡單的Queue對象並將其保存到文件。

1

而不是檢查日期時間,排序您的項目,而不是,你可以假設表中的第一行是最後一個插入。

在您的內容提供商的insert(Uri uri, ContentValues cv)中,在調用db.insert之前,您可以先使用getCount()查詢該表上的項目數,並在count> 50時刪除第一行。然後繼續進行插入呼叫。

0

這是我爲交易清單所做的工作,它的工作原理沒問題。當插入一個新條目我檢查,如果該計數值超過50,如果是這樣,我只是刪除最後一個條目:

// Adding new transaction 
    public void addTransaction(Transaction transaction) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     if(getTransactionsCount() > 50){ 
      List<Transaction> allTransactions = getAllTransactions(); 
      Transaction oldestTransaction = allTransactions.get(allTransactions.size()-1); 
      deleteTransaction(oldestTransaction); 
     } 

     ContentValues values = new ContentValues(); 
     values.put(KEY_TRANSACTION_UID, transaction.getUID()); 
     values.put(KEY_TRANSACTION_AMOUNT, transaction.getAmount()); 
     values.put(KEY_TRANSACTION_IS_ADD, transaction.getIsAdd()); 
     // Inserting Row 
     db.insert(TABLE_TRANSACTIONS, null, values); 

     db.close(); // Closing database connection 
    } 

而且getAllTransactions()返回按照從大到小的順序列表(基於ID的主鍵) :

// Getting All Transactions 
    public List<Transaction> getAllTransactions() { 
     List<Transaction> transactionList = new ArrayList<Transaction>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_TRANSACTIONS + " ORDER BY " + KEY_TRANSACTION_ID + " DESC"; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Transaction transaction = new Transaction(); 
       transaction.setID(Integer.parseInt(cursor.getString(0))); 
       transaction.setUID(cursor.getString(1)); 
       transaction.setAmount(cursor.getString(2)); 
       transaction.setIsAdd(cursor.getString(3)); 
       // Adding contact to list 
       transactionList.add(transaction); 
      } while (cursor.moveToNext()); 
     } 
     // return contact list 
     return transactionList; 
    } 
相關問題