14

Android SQLite データベースで WHERE IN 句を動作させることができません。

Androidでこのようなステートメントを実行する方法はありますか? :

SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')
4

7 に答える 7

15

を使用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()])
);
于 2015-03-27T21:22:37.427 に答える
10

rawQuery次の方法を使用する必要があります。

Cursor c = db.rawQuery("SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')");
于 2011-06-06T22:49:36.010 に答える
2

コンテンツ プロバイダーを使用している場合は、次のようにクエリ関数を使用できます。

getContentResolver().query(URI,new String[] {"body"}, "title IN ?", new String[] {"('title1','title2','title3')"}, null)

私はこれをテストしていませんが、ドキュメントによると、これは機能するはずです。

于 2011-06-06T22:53:24.453 に答える
1

この答えを見てください。同様のケースで私を助けてくれました。

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句の項目に一致する可変の疑問符プレースホルダー(?)を提供することです。そしてもちろん-文字列配列としてのそれらの引数。

于 2012-10-15T07:48:11.077 に答える
1

これを行う別の方法

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();
}
于 2012-07-06T06:53:26.610 に答える