こんにちは、私はこれを行うことができます??,
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 配列と一致しないすべての行を削除したいと考えています。
したがって、問題は、1 つの値のみに置き換えられるプレースホルダーを 1 つだけ配置し、引数の配列には 1 つの項目のみを含める必要があることです。?
配列内の各アイテムに9x があれば、うまくいく可能性があります。
1 つのプレースホルダー - 1 つの値(同じ順序)として機能します。このコード スニペットを作成しました。見てみな。
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(']', ')')
配列を適切なSQLwhere句形式に変換します