Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何比较ArrayList和SQLite表行?_Java_Android_Sqlite_Arraylist - Fatal编程技术网

Java 如何比较ArrayList和SQLite表行?

Java 如何比较ArrayList和SQLite表行?,java,android,sqlite,arraylist,Java,Android,Sqlite,Arraylist,假设我有一个名为“table”的sqlite表,其行id为text1、text2 现在我有了一个包含内容的ArrayList,比如: id:0,text1:这是第一个文本,text2:这是第二个文本 id:21,text1:blabla,text2:blabla2 ... 现在我想比较一下sqlite行和arraylist中的每个元素行。 例如,我想说删除sqlite表中与arraylist中的任何行都不相等的每一行 我找不到任何包含我的问题的同等线索。。也许你可以帮我或者给我一些链接。谢

假设我有一个名为“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 removeows(数据库适配器dbAdapter,ArrayList列表){
SQLiteDatabase db=dbAdapter.openwriteabledatabase();
Cursor rows=db.query(/*在SQLite db*/上执行一些查询);
while(rows.moveToNext()){
int id=rows.getInt(0);
String text1=rows.getString(1);
String text2=rows.getString(2);
布尔值=假;
对于(SomeObject对象:列表){
if(obj.getId()==id&&obj.getText1().equals(text1)&&obj.getText2().equals(text2)){
包含=正确;
打破
}
}
如果(!包括在内){
db.delete(/*执行删除行*/);
}
}
}
编辑:要将列表中尚未包含的对象添加到数据库,请执行以下操作:

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*/);
        }
    }
}
public void addListToDb(数据库适配器dbAdapter,ArrayList列表){
SQLiteDatabase db=dbAdapter.openwriteabledatabase();
Cursor rows=db.query(/*在SQLite db*/上执行一些查询);
对于(SomeObject对象:列表){
布尔值=假;
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)){
包含=正确;
打破
}
}
行。移动位置(-1);
如果(!包括在内){
db.insert(/*执行对象的插入*/);
}
}
}

还有另一种方法来完成这项任务。使用
SQLiteDatabase#insertWithOnConflict(String table,String nullColumnHack,ContentValues initialValues,int conflictAlgorithm)
方法循环列表中的元素并将每个元素添加到数据库中,并将SQLiteDatabase.CONFLICT\u作为conflictAlgorithm忽略。若数据库中还不存在元素,则上述方法将添加该元素。否则它将忽略它。需要记住的重要一点是,当我们尝试使用CONFLICT\u IGNORE CONFLICT algorithm插入数据库中已经存在的行时,我们将得到-1结果,而不是现有行的主键(Android文档在这里有误导性)。

谢谢我的朋友。。我会试试的是的它奏效了。。如何查看sqlite中是否已经存在任何列表数组。。如果否,那么将数组添加到sqliteI中,我将编辑答案以向您展示方法,但实际上其主要思想非常相似。