SupportSqliteQueryBuilder дает неверные результаты запроса - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь создать следующий запрос, используя SupportSQLiteQueryBuilder:

SELECT * FROM tablename WHERE favorite=1 ORDER BY col1

Я использовал следующий код для создания этого запроса:


public static SupportSQLiteQuery getSortedQuery(String sortByColname, boolean fav){
    SupportSQLiteQueryBuilder builder=
            SupportSQLiteQueryBuilder
                    .builder(DbUtils.Names.TABLE_NAME)
                    .columns(new String[]{Names.COL1,Names.COL2,Names.COL3,Names.COL4,Names.COL5,Names.COL_FAVORITE})
                    .orderBy(sortByColname) ;
    if(fav){
        builder.selection(Names.COL_FAVORITE,new String[]{"1"}  );
    }

    SupportSQLiteQuery query= builder.create();
    //Log.e("DB_UTILS", "getSortedQuery:query="+query.getSql());
    return  query;
}

Но при проверке модульного теста я обнаружил, что ниже приведен SQL-запрос, который генерирует этот метод:

SELECT col1,col2,col3,col4,col5 favorite  FROM tablename WHERE favorite ORDER BY col1
  1. Почему Аргументация не попадает в это утверждение? почему только favourite сгенерировано и favourite=1?

  2. Есть ли способ сгенерировать * в запросе? писать все названия вместо * больно

1 Ответ

0 голосов
/ 26 июня 2019

Если честно, я бы использовал для этого необработанный запрос с разными строками SQL, основанными на fav.Но, если вы действительно хотите использовать SupportSQLiteQueryBuilder ...

Что касается пункта 1, обычно позиционные параметры оцениваются во время выполнения, к чему и стремится API SupportSQLiteQueryBuilder.Таким образом, вы можете:

  • Заменить Names.COL_FAVORITE на Names.COL_FAVORITE = ?, который затем будет использовать new String[]{"1"} во время выполнения
  • Заменить Names.COL_FAVORITE на Names.COL_FAVORITE = 1, что будетигнорировать ваш new String[]{"1"} во время выполнения

В отношении пункта 2 заменить .columns(new String[]{Names.COL1,Names.COL2,Names.COL3,Names.COL4,Names.COL5,Names.COL_FAVORITE}) на .columns(new String[]{"*"}).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...