[英]How to compare ArrayList with SQLite Table Row?
假設我有一個名為“table”的 sqlite 表,其中包含行 id、text1、text2
現在我有一個包含內容的 ArrayList,讓我們說:
現在我想在sqlite行和arraylist中的每個元素行之間進行比較。 例如,我想說刪除sqlite 表中與arraylist 中任何行都不相等的每一行。
我找不到任何包含我的問題的相同線程..也許你可以幫助我或給我一些鏈接。 感謝你
這里有一些示例代碼。 你應該明白:
public void removeRows(DatabaseAdapter dbAdapter, ArrayList<SomeObject> list) {
SQLiteDatabase db = dbAdapter.openWritableDatabase();
Cursor rows = db.query(/ *perform some query on SQLite db*/);
while(rows.moveToNext()) {
int id = rows.getInt(0);
String text1 = rows.getString(1);
String text2 = rows.getString(2);
boolean included = false;
for(SomeObject obj : list) {
if(obj.getId() == id && obj.getText1().equals(text1) && obj.getText2().equals(text2)) {
included = true;
break;
}
}
if(!included) {
db.delete(/*perform deletion of row*/);
}
}
}
編輯:要將列表中尚未包含的對象添加到數據庫中,請執行以下操作:
public void addListToDb(DatabaseAdapter dbAdapter, ArrayList<SomeObject> list) {
SQLiteDatabase db = dbAdapter.openWritableDatabase();
Cursor rows = db.query(/ *perform some query on SQLite db*/);
for(SomeObject obj : list) {
boolean included = false;
while(rows.moveToNext()) {
int id = rows.getInt(0);
String text1 = rows.getString(1);
String text2 = rows.getString(2);
if(obj.getId() == id && obj.getText1().equals(text1) && obj.getText2().equals(text2)) {
included = true;
break;
}
}
rows.moveToPosition(-1);
if(!included) {
db.insert(/*perform insert of object*/);
}
}
}
還有另一種方法可以完成此任務。 循環列表中的元素並使用SQLiteDatabase#insertWithOnConflict(String table, String nullColumnHack, ContentValues initialValues, int conflictAlgorithm)
方法將每個元素添加到數據庫中,並將 SQLiteDatabase.CONFLICT_IGNORE 作為沖突算法傳遞。 如果數據庫中尚不存在,則上述方法將添加元素。 否則它會忽略它。 需要記住的重要一點是,當我們嘗試使用 CONFLICT_IGNORE 沖突算法插入數據庫中已存在的行時,我們將得到 -1 結果而不是現有行的主鍵(Android 文檔在此處具有誤導性)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.