在这里你有一些示例代码。你应该得到的想法:
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作为conflictAlgorithm传递。如果数据库中尚不存在上述方法,则会添加元素。否则它会忽略它。需要记住的重要一点是,当我们尝试使用CONFLICT_IGNORE冲突算法插入已存在于数据库中的行时,我们将得到-1结果而不是现有行的主键(Android文档在此处具有误导性)。
谢谢我的朋友..我会尝试它 – Steve 2014-12-06 17:27:10
是的,它的工作..我怎么看如果任何列表数组已经在sqlite ..如果没有,然后将数组添加到sqlite – Steve 2014-12-06 22:48:36
我将编辑答案显示你方式,但其实主要想法非常相似。 – 2014-12-06 23:56:29