从sqlite3 DB中删除不在对象列表中的行

时间:2013-08-29 21:25:44

标签: android sqlite

我有一个包含某些“产品”对象的列表,并希望根据其唯一属性serialNumber删除数据库中不在该列表中的所有产品行。

示例,如果我的列表包含:

  • 产品A
  • 产品B
  • 产品C

我的数据库包含:

  • 产品A
  • 产品B
  • 产品C
  • 产品D

然后我想从数据库中删除产品D.

这是我的清单:

List<Product> products;

我正在考虑在列表上循环以创建serialNumbers的字符串数组serialNumber

String[] serialNumbers;

for (int i=0; i<products.size(); i++){
    //Insert serialNumbers in Array
}

然后像:

database.delete(MySQLiteHelper.TABLE_PRODUCTS, MySQLiteHelper.COLUMN_SERIALNUMBER + " NOT IN " + SerialNumbers, null);

我怎样才能进行数据库查询?

1 个答案:

答案 0 :(得分:5)

您可以像这样构建inQuery:

StringBuilder inQuery = new StringBuilder();

inQuery.append("(");
boolean first = true;
for (String item : serialNumbers) {
    if (first) {
        first = false;
        inQuery.append("'").append(item).append("'");
    } else {
        inQuery.append(", '").append(item).append("'");
    }
}
inQuery.append(")");

然后使用它:

database.delete(MySQLiteHelper.TABLE_PRODUCTS, MySQLiteHelper.COLUMN_SERIALNUMBER + " NOT IN " + inQuery.toString(), null);