sqlite в студии androids с аргументом selectionArgs - PullRequest
0 голосов
/ 26 января 2020

У меня есть следующая функция в android studio, которая должна возвращать sqlite-курсор. Проблема заключается в аргументе selectionArgs. Всякий раз, когда я передаю ему более одного значения, он возвращает курсор с 0 записями.

    public Cursor getCursor(String strListWhere, String strTable, String strCols) {

        String strColsToReturn = mySqliteHandler.getWhereColNamesFromJsonString(strListWhere);
        String strArgs = mySqliteHandler.getWhereColArgsFromJsonString(strListWhere);

        Log.d(TAG, "qqqq9: " + strArgs);

        String strTableName = strTable;
        String[] strColumnsToReturn = { strCols };
        String strSelectWhere = strColsToReturn ;
        String[] strSelectArgs = { strArgs };
        Cursor csrResult = sqLiteDatabase.query(true, strTableName, strColumnsToReturn, strSelectWhere, strSelectArgs, null, null, null, null);

        Log.d(TAG, "qqqq9: " + csrResult.getCount());

        return  csrResult;

    }

Значение в strColsToReturn равно animal_class = ? and province_name = ? Значение в strArgs равно Bird, KwaZulu-Natal Поэтому я хочу, чтобы оно было animal_class = 'Bird' and province_name = 'KwaZulu-natal'

Когда я передаю только одно значение, оно работает, например. Значение в strColsToReturn равно animal_class = ? Значение в strArgs равно Bird

Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ: работает следующий код:

    public Cursor getCursor(String strListWhere, String strTable, String strCols) {

        String strColsToReturn = mySqliteHandler.getWhereColNamesFromJsonString(strListWhere);
        List<String> arrWhere = new ArrayList<String>();
        arrWhere = mySqliteHandler.getWhereArray(strListWhere);

        String[] finalValue = new String[ arrWhere.size() ];
        arrWhere.toArray( finalValue );

        String strTableName = strTable;
        String[] strColumnsToReturn = { strCols };
        String strSelectWhere = strColsToReturn ;
        Cursor csrResult = sqLiteDatabase.query(true, strTableName, strColumnsToReturn, strSelectWhere, finalValue, null, null, null, null);

        return  csrResult;

    }

1 Ответ

0 голосов
/ 26 января 2020

Значение для strColumnsToReturn должно быть массивом с именами возвращаемых столбцов, например:

new String[] {column1, column2, column3} 

, где column1, column2, column3 - строки. Значение для strSelectWhere должно быть строкой:

"animal_class = ? and province_name = ?"

, а значение strSelectArgs должно быть массивом строк с параметрами, которые вы передаете каждому из ? заполнителей strSelectWhere :

new String {"Bird", "KwaZulu-Natal"}

Вы можете найти больше здесь

...