Search code examples
androidsqliteandroid-sqlite

androids studio sqlite issue with selectionArgs argument


I have the following function in android studio, which is supposed to return a sqlite cursor. The problem comes in the selectionArgs argument. Whenever I am passing more than one value to it, it returns a cursor with 0 records.

    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;

    }

The value in strColsToReturn is animal_class = ? and province_name = ? The value in strArgs is Bird, KwaZulu-Natal So I want it to be animal_class = 'Bird' and province_name = 'KwaZulu-natal'

When I only pass one value it works, for example The value in strColsToReturn is animal_class = ? The value in strArgs is Bird

Can anyone assist?

EDIT: the following code works:

    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;

    }

Solution

  • The value for strColumnsToReturn should be an array with the names of the columns that you want returned, like:

    new String[] {column1, column2, column3} 
    

    where column1, column2, column3 are strings.
    The value for strSelectWhere should be the string:

    "animal_class = ? and province_name = ?"
    

    and the value of strSelectArgs should be a string array with the parameters that you pass to each of the ? placeholders of strSelectWhere:

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

    You can find more here