I currently have a SQLite Database to save a list of recent searches done in my app. I am currently inserting like this:
/**
* Inserts a RecentSearch into the Recent Searches Table
*
* @param aRecentSearch - The RecentSearch
*/
public void insertSearchIntoDB(RecentSearch aRecentSearch) {
SQLiteDatabase db = helper.getWritableDatabase();
try {
ContentValues contentValues = new ContentValues();
contentValues.put(DBHelper.ENTITY_ID, aRecentSearch.getEntityId());
contentValues.put(DBHelper.SEARCH_PHRASE, aRecentSearch.getPhrase());
contentValues.put(DBHelper.SEARCH_TYPE, aRecentSearch.getSearchType().getItemId());
contentValues.put(DBHelper.SEARCH_CATEGORY_NAME, aRecentSearch.getCategoryName());
contentValues.put(DBHelper.SEARCH_TIME, aRecentSearch.getSearchTime());
contentValues.put(DBHelper.RATINGS, aRecentSearch.getSellerRatingsCount());
contentValues.put(DBHelper.STAR_COUNT, aRecentSearch.getSellerStarCount());
contentValues.put(DBHelper.SELLER_VERIFIED, TradeUtils.getBooleanAsInt(aRecentSearch.isSellerVerified()));
db.insertWithOnConflict(DBHelper.RECENT_SEARCHES_TABLE, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE);
} catch (Exception e) {
Log.e("TAG", "insertSearchIntoDB: " + aRecentSearch.getPhrase());
} finally {
if (db.isOpen()) {
db.close();
}
}
}
and getting the lastest 8 recent searches from the database like this:
public List<RecentSearch> getRecentSearchesFromDataBase() {
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.query(DBHelper.RECENT_SEARCHES_TABLE, DBHelper.RECENT_SEARCHES_COLUMNS_AS_ARRAY, null, null, null, null, DBHelper.SEARCH_TIME + " DESC LIMIT 8");
List<RecentSearch> recentSearchesList = new ArrayList<>();
try {
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
RecentSearch recentSearch = new RecentSearch();
int id_Index = cursor.getColumnIndex(DBHelper.ID);
int entityId_Index = cursor.getColumnIndex(DBHelper.ENTITY_ID);
int searchCategory_Index = cursor.getColumnIndex(DBHelper.SEARCH_CATEGORY_NAME);
int searchPhrase_Index = cursor.getColumnIndex(DBHelper.SEARCH_PHRASE);
int searchType_Index = cursor.getColumnIndex(DBHelper.SEARCH_TYPE);
int searchTime_Index = cursor.getColumnIndex(DBHelper.SEARCH_TIME);
int sellerRatings_Index = cursor.getColumnIndex(DBHelper.RATINGS);
int sellerVerified_Index = cursor.getColumnIndex(DBHelper.SELLER_VERIFIED);
int sellerStarCount_Index = cursor.getColumnIndex(DBHelper.STAR_COUNT);
recentSearch.setId(cursor.getInt(id_Index));
recentSearch.setEntityId(cursor.getInt(entityId_Index));
recentSearch.setPhrase(cursor.getString(searchPhrase_Index));
recentSearch.setCategoryName(cursor.getString(searchCategory_Index));
recentSearch.setSearchType(SearchType.getValueOrDefault(cursor.getInt(searchType_Index), SearchType.TRADE_SEARCH));
recentSearch.setSearchTime(cursor.getLong(searchTime_Index));
recentSearch.setSellerVerified(TradeUtils.getBooleanFromInt(cursor.getInt(sellerVerified_Index)));
recentSearch.setSellerRatingsCount(cursor.getInt(sellerRatings_Index));
recentSearch.setSellerStarCount(cursor.getInt(sellerStarCount_Index));
recentSearchesList.add(recentSearch);
}
}
} catch (Exception e) {
Log.e("TAG", "getRecentSearchesFromDataBase");
} finally {
cursor.close();
}
return recentSearchesList;
}
Now my worry is that the database still saves all the recent search and all I am doing is just pulling the latests 8 recent searches with this line:
Cursor cursor = db.query(DBHelper.RECENT_SEARCHES_TABLE, DBHelper.RECENT_SEARCHES_COLUMNS_AS_ARRAY, null, null, null, null, DBHelper.SEARCH_TIME + " DESC LIMIT 8");
So my table will have for example 30 recent searches but I am only pulling the latest 8.
I would like to know is how can I either prevent more than 8 entries being in the table or delete all but the latest 8 entries in the table?
Thank you