2012-08-02 68 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; 
    } 
相关问题