在SQLite中动态使用IN()

问题描述 投票:1回答:1

我有以下查询:

public List<ListCoursesFilterModel> getListSubject(List<String> lstLang) {
    StringBuilder langs = new StringBuilder();
    StringBuilder questionMark = new StringBuilder();
    for (int i = 0; i < lstLang.size(); i++) {
        langs.append(",").append(lstLang.get(i).toLowerCase());
        questionMark.append(",?");
    }
    String res = langs.substring(1, langs.length());
    String qs = questionMark.substring(1, questionMark.length());
    List<ListCoursesFilterModel> list = new ArrayList<>();
    SQLiteDatabase db = databaseHelper.getWritableDatabase();
    Cursor cursor = db.query(
            false,
            "ShortMajorTBL",
            null,
            "langId IN(" + qs + ") AND identifier =?",
            new String[]{res, "S300"},
            null,
            null,
            null,
            null
    );
    try {
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    ListCoursesFilterModel listCoursesFilterModel = new ListCoursesFilterModel();
                    listCoursesFilterModel.setSubject(cursor.getString(cursor.getColumnIndex("subject")));
                    listCoursesFilterModel.setLangId(cursor.getString(cursor.getColumnIndex("langId")));
                    listCoursesFilterModel.setIsSelected(cursor.getString(cursor.getColumnIndex("isSelected")));
                    listCoursesFilterModel.setIdentifier(cursor.getString(cursor.getColumnIndex("identifier")));
                    listCoursesFilterModel.setTitle(cursor.getString(cursor.getColumnIndex("title")));
                    listCoursesFilterModel.setCount(cursor.getInt(cursor.getColumnIndex("count")));
                    list.add(listCoursesFilterModel);
                } while (cursor.moveToNext());
            }
            return list;
        }
    } catch (Exception ex) {
        Throwable t = new Throwable(ex).fillInStackTrace();
        FirebaseCrash.report(t);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
    return null;
}

lstLang,当我有一个值 - 例如en - 它工作并得到结果,但当我有多个值 - 例如en,fr,ar - 它没有显示任何结果。

android sqlite android-sqlite android-cursor
1个回答
3
投票

IN子句中的每个值都是一个字符串。 因此,它必须单独逃脱。

即:yasxsvppoi。

所以,有类似的东西

'en', 'fr', 'ar'
© www.soinside.com 2019 - 2024. All rights reserved.