gpt4 book ai didi

java - 如何比较 ArrayList 与 SQLite 表行?

转载 作者:行者123 更新时间:2023-11-29 20:57:03 24 4
gpt4 key购买 nike

假设我有一个名为“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 文档在这里具有误导性)。

关于java - 如何比较 ArrayList 与 SQLite 表行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27333797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com