Java 如何比较ArrayList和SQLite表行?
假设我有一个名为“table”的sqlite表,其行id为text1、text2 现在我有了一个包含内容的ArrayList,比如: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中的任何行都不相等的每一行 我找不到任何包含我的问题的同等线索。。也许你可以帮我或者给我一些链接。谢
- id:0,text1:这是第一个文本,text2:这是第二个文本
- id:21,text1:blabla,text2:blabla2 ... 李>
我找不到任何包含我的问题的同等线索。。也许你可以帮我或者给我一些链接。谢谢你这里有一些示例代码。你应该知道:
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中,我将编辑答案以向您展示方法,但实际上其主要思想非常相似。