嗨,我可以这样做吗??,
int[] ids=new int[]{1,2,3,4,6,7,8,9,10};
db.execSQL(DELETE FROM TABLE_NAME WHERE id NOT IN ?,ids);
基本上我想删除所有与我的 ids 数组不匹配的行。
所以你的问题是你只放置了一个占位符,它将只替换为一个值,并且 args 数组应该只有一项。如果?
数组中的每个项目都有 9x,它应该可以工作。
它用作一个占位符 - 一个值(相同的顺序)。我为你写了这段代码。看看这个。
int[] ids = new int[] {1,2,3,4,6,7,8,9,10};
StringBuilder query = new StringBuilder();
query.append("delete from table where column_id not in (");
for (int i = 0; i < ids.length; i++) {
query.append("?");
if (i < ids.length - 1) {
query.append(",");
}
}
query.append(")");
db.execSQL(query.toString(), ids);
现在它应该可以工作了。?
动态创建的查询中的字符也称为占位符,每个占位符将被String[]
相同顺序的值替换。
每当您使用数据库时,我都非常推荐使用占位符。这种方法更清洁、更安全、更美观。
public int delete() {
int[] ids = new int[] {1,2,3,4,6,7,8,9,10};
String[] args = new String[ids.length];
StringBuilder query = new StringBuilder();
query.append("delete from table where column_id not in (");
SQLiteStatement stmt = null;
for (int i = 0; i < ids.length; i++) {
args[i] = String.valueOf(ids[i]);
query.append("?");
if (i < ids.length - 1) {
query.append(",");
}
}
query.append(")");
stmt = db.compileStatement(query.toString());
stmt.bindAllArgsAsStrings(args);
return stmt.executeUpdateDelete();
}
您可以使用:
java.util.Arrays.toString(ids).replace('[', '(').replace(']', ')')
将数组转换为合适的 SQL where 子句格式