首页 > 解决方案 > androids studio sqlite 问题与 selectionArgs 参数

问题描述

我在 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;

    }

标签: androidsqliteandroid-sqlite

解决方案


的值strColumnsToReturn应该是一个数组,其中包含您要返回的列的名称,例如:

new String[] {column1, column2, column3} 

column1, column2, column3字符串在哪里。
的值strSelectWhere应该是字符串:

"animal_class = ? and province_name = ?"

的值strSelectArgs应该是一个字符串数组,其中包含您传递给每个?占位符的参数strSelectWhere

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

你可以在这里找到更多


推荐阅读