Как запросить SQL с выбранным пользователем заказом - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь настроить выбранный пользователем SQL-запрос в Android Room.

    @Query("SELECT * FROM wrestler_table ORDER BY :columnName :sortOrder LIMIT :size")
    LiveData<List<WrestlersEntity>> getAllWrestlers(String columnName, String sortOrder, int size);

Android stuido выводит sortOrder в запросе как ошибку.

    ASC, BETWEEN, COLLATE, DESC, IN, LIMIT, comma or semicolon expected, got ':sortOrder'

Я хочу, чтобы sortOrder был переменной, чтобы пользователь мог изменить порядок, в котором возвращаются данные. Есть мысли о том, что я здесь делаю неправильно?

1 Ответ

1 голос
/ 26 октября 2019

Ну, вы не можете передать направление сортировки в качестве параметра запроса. Не только SQLite, но и большинство СУБД не позволяют этого.

Следующее выражение должно помочь:

ORDER BY 
    CASE WHEN :sortOrder = 'DESC' THEN :columnName END DESC,
    CASE WHEN :sortOrder = 'ASC' THEN :columnName END ASC
LIMIT :size"

Кроме того, вы можете также объединить направление сортировки непосредственно в строке запроса вместо передачи его в качестве параметра.

...