Android SQLite データベースで WHERE IN 句を動作させることができません。
Androidでこのようなステートメントを実行する方法はありますか? :
SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')
を使用TextUtils.join(",", parameters)
して sqlite バインディング パラメータを利用できます。ここで、はプレースホルダparameters
付きのリストで"?"
あり、結果の文字列は のようなもの"?,?,..,?"
です。
以下に少し例を示します。
Set<Integer> positionsSet = membersListCursorAdapter.getCurrentCheckedPosition();
List<String> ids = new ArrayList<>();
List<String> parameters = new ArrayList<>();
for (Integer position : positionsSet) {
ids.add(String.valueOf(membersListCursorAdapter.getItemId(position)));
parameters.add("?");
}
getActivity().getContentResolver().delete(
SharedUserTable.CONTENT_URI,
SharedUserTable._ID + " in (" + TextUtils.join(",", parameters) + ")",
ids.toArray(new String[ids.size()])
);
rawQuery
次の方法を使用する必要があります。
Cursor c = db.rawQuery("SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')");
コンテンツ プロバイダーを使用している場合は、次のようにクエリ関数を使用できます。
getContentResolver().query(URI,new String[] {"body"}, "title IN ?", new String[] {"('title1','title2','title3')"}, null)
私はこれをテストしていませんが、ドキュメントによると、これは機能するはずです。
この答えを見てください。同様のケースで私を助けてくれました。
String[] names = { "name1", "name2" }; // do whatever is needed first
String query = "SELECT * FROM table" + " WHERE name IN (" + makePlaceholders(names.length) + ")";
Cursor cursor = mDb.rawQuery(query, names);
ここでの主なポイントは、IN句の項目に一致する可変の疑問符プレースホルダー(?)を提供することです。そしてもちろん-文字列配列としてのそれらの引数。
これを行う別の方法
Cursor mCursor = SQLiteDatabase.query(true, "Name of table","String array of selection columns","title in ('title1', 'title2', 'title3')", null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}