Поисковый запрос Android Sqlite с предложениями WHERE, AND, OR - PullRequest
0 голосов
/ 18 мая 2018

Здесь мне нужно получить результаты из таблицы 'TABLE_NAME', где 'COLUMN_NAME_COUNTRY' = country 'AND' 'COLUMN_NAME_CATEGORY' = local 'OR' NA (Na also a value in the 'COLUMN_NAME_CATEGORY'.Ниже приведен мой код:

public List<AppDataBean>getAllDataForSelectedCountryWithCategory(String country){

        ArrayList<AppDataBean>dataList= new ArrayList<>();
        SQLiteDatabase db = AppDbHelper.getInstance(context).getWritableDatabase();
        dataList.clear();

        try {
            Cursor c = db.rawQuery("SELECT * FROM " + AppDbConstructor.AppData.TABLE_NAME + " WHERE " + AppDbConstructor.AppData.COLUMN_NAME_COUNTRY + "='" + country + "'"
                    + " AND " + AppDbConstructor.AppData.COLUMN_NAME_CATEGORY + "='" + "Local" + "'" + " OR " + AppDbConstructor.AppData.COLUMN_NAME_CATEGORY + "='" + "NA" + "'" , null);

            if (c.getCount()>0)
            {
                if (c.moveToFirst())
                {
                    for (int i=0; i<c.getCount(); i++)
                    {
                        AppDataBean appDataBean = new AppDataBean();
                        appDataBean.setCategory(c.getString(c.getColumnIndex(AppDbConstructor.AppData.COLUMN_NAME_CATEGORY)));
                        appDataBean.setUrl(c.getString(c.getColumnIndex(AppDbConstructor.AppData.COLUMN_NAME_URL)));
                        appDataBean.setSource(c.getString(c.getColumnIndex(AppDbConstructor.AppData.COLUMN_NAME_SOURCE)));
                        appDataBean.setIconUrl(c.getString(c.getColumnIndex(AppDbConstructor.AppData.COLUMN_NAME_ICON_URL)));
                        appDataBean.setCountry(c.getString(c.getColumnIndex(AppDbConstructor.AppData.COLUMN_NAME_COUNTRY)));
                        Log.d("APP_DB_SOURCE","COLUMN_NAME_SOURCE: "+ c.getString(c.getColumnIndex(AppDbConstructor.AppData.COLUMN_NAME_URL))
                                + ", " + c.getString(c.getColumnIndex(AppDbConstructor.AppData.COLUMN_NAME_CATEGORY)));

                        dataList.add(appDataBean);
                        Log.d("APPDBSOURCE", "LIST_VALUES_ARE" + dataList.get(i).getCategory() + ", " + dataList.get(i).getCountry());
                        c.moveToNext();
                    }
                }
            }
            c.close();
        }catch (Exception e){
            e.printStackTrace();
        }
        finally
        {
            db.close();
        }

        return dataList;
    }

Наконец, результатом было ' все страны ' с категорией ' local '.

1 Ответ

0 голосов
/ 18 мая 2018

Вам не хватает скобок.

Либо вы можете сделать это:

Cursor c = db.rawQuery("SELECT * FROM " + AppDbConstructor.AppData.TABLE_NAME + " WHERE " + AppDbConstructor.AppData.COLUMN_NAME_COUNTRY + "='" + country + "'"
                    + " AND (" + AppDbConstructor.AppData.COLUMN_NAME_CATEGORY + "='" + "Local" + "'" + " OR " + AppDbConstructor.AppData.COLUMN_NAME_CATEGORY + "='" + "NA" + "')" , null);

Или вот так:

Cursor c = db.rawQuery("SELECT * FROM " + AppDbConstructor.AppData.TABLE_NAME + " WHERE " + AppDbConstructor.AppData.COLUMN_NAME_COUNTRY + "='" + country + "'"
                    + " AND " + AppDbConstructor.AppData.COLUMN_NAME_CATEGORY + " IN " + "('"+ "Local"+"','"+"NA" + "')" , null);
...