簡體   English   中英

如何將 ArrayList 與 SQLite 表行進行比較?

[英]How to compare ArrayList with SQLite Table Row?

假設我有一個名為“table”的 sqlite 表,其中包含行 id、text1、text2

現在我有一個包含內容的 ArrayList,讓我們說:

  • id:0,text1:這是第一個文本,text2:這是第二個文本
  • id:21, text1: blabla, text2: blabla2 ...

現在我想在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM