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

Dis*_*two 2 sqlite android

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

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

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

我的DB包含:

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

然后我想从DB中删除产品D.

这是我的清单:

List<Product> products;
Run Code Online (Sandbox Code Playgroud)

我想循环名单上创建一个字符串数组serialNumbersserialNumber.

String[] serialNumbers;

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

然后像:

database.delete(MySQLiteHelper.TABLE_PRODUCTS, MySQLiteHelper.COLUMN_SERIALNUMBER + " NOT IN " + SerialNumbers, null);
Run Code Online (Sandbox Code Playgroud)

我怎么能进行数据库查询?

Jua*_*gcg 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(")");
Run Code Online (Sandbox Code Playgroud)

然后使用它:

database.delete(MySQLiteHelper.TABLE_PRODUCTS, MySQLiteHelper.COLUMN_SERIALNUMBER + " NOT IN " + inQuery.toString(), null);
Run Code Online (Sandbox Code Playgroud)