我有一个执行多项选择的列表,然后删除使用此方法选择的项目。
public Integer deleteDesc(ArrayList<String> rows) {
String[] args = rows.toArray(new String[rows.size()]);
Log.i("AMS", "Args: " + args);
db = this.getWritableDatabase();
return db.delete("DropdownList", "Description IN (?)", args);
}
其中参数ArrayList包含所选项。当我只选择一个项目但返回错误“绑定或列索引超出范围”时,我工作。
我很确定这是导致它的whereClause,因为我不确定如何正确使用“?”
答案 0 :(得分:0)
我使用了这句话TextUtils.join(",", Collections.nCopies(args.length, "?"));
工作代码:
public Integer deleteDesc(ArrayList<String> rows) {
String[] args = rows.toArray(new String[rows.size()]);
db = this.getWritableDatabase();
return db.delete("DropdownList", "Description IN (" + TextUtils.join(",", Collections.nCopies(args.length, "?"))
+ ")", args);
}
答案 1 :(得分:0)
您可以使用?WHERE IN
子句构建?使用准备好的声明为每个值占位符:
SQLiteDatabase db = this.getWritableDatabase();
StringBuilder sql = new StringBuilder("DELETE FROM yourTable WHERE Description IN (?");
for (int i=1; i < args.length; i++) {
sql.append(",?");
}
sql.append(")");
SQLiteStatement stmt = db.compileStatement(sql.toString());
for (int i=0; i < args.length; ++i) {
stmt.bindString(i+1, args[i]);
}
stmt.execute();
请注意,强烈建议您在此处使用预准备语句,因为您要删除数据。在此方法中允许SQL注入可能会产生不良副作用。