2012-08-02 3 views

답변

1

FIFO 로직을 생성하기 위해 ID로 재생할 필요가 없습니다. 가장 좋은 방법은이 열과 관련하여 오름차순으로 레코드를 선택하는 데 도움이되는 현재 시간 스탬프를 자동으로 삽입하는 테이블에 DATETIME이라는 다른 열을 추가하는 것입니다.

DateAdded DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP 

당신이 새로운 레코드를 삽입 이제까지 당신이이 테이블에 전체 레코드 COUNT 점검을 수행해야 할 때 확인하고 필요한 경우 DateAdded에 대한 가장 오래된 기록을 삭제 : 새 열은 무언가 같이해야합니다. 또한 가장 오래된 레코드를 삭제할 경우 LIMIT 및/또는 MAX을 선택 쿼리에 사용할 수 있습니다.

+0

감사합니다. 비슷한 방법으로 코드를 최적화했습니다. – Shannon

+0

좀 더 자세히 설명해 주시겠습니까? –

0

테이블에 datetime 형식 열을 아직 포함하지 않은 경우 추가하고 각 삽입시 'now'로 설정하십시오. 그런 다음 각 삽입에서 모두를 50으로 설정하고 날짜별로 정렬하여 선택하십시오. 마지막 항목을 선택하고이 마지막 항목보다 오래된 항목을 모두 삭제하려면 삭제 쿼리를 실행하십시오.

0

sqlite를 사용해야합니까? 파일 처리를 사용할 수 있습니까? 간단한 Queue 개체를 사용하여 파일에 저장할 수 있습니다.

1

날짜 시간, 항목 정렬 및 기타 등등 대신 테이블의 첫 번째 행이 마지막으로 삽입되었다고 가정 할 수 있습니다.

db.insert 호출을하기 전에 콘텐츠 공급자의 insert(Uri uri, ContentValues cv)에서 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()는 내림차순으로 목록을 반환합니다 (아이디 기본 키 기준) :

// 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; 
    } 
관련 문제