Как передать сегмент пользовательских запросов в @query в RoomDb - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь передать предложение Where в существующий запрос в RoomDbD

@Query("SELECT products_table.id,products_table.name as productName,products_table.image,variations_table.name as variation,variations_table.id as variation_id,variations_table.default_sell_price as selling_price  from products_table INNER JOIN variations_table ON products_table.id = variations_table.product_id LEFT JOIN variations_locations_details_table as VLD ON variations_table.id = VLD.variation_id || :whereClause ")
LiveData<List<VariedProducts>> getProductsWithVariations(String whereClause);

Возвращает все данные независимо от запроса, например

productsDao.getProductsWithVariations("WHERE products_table.id = 4");

Помочь пользователям БД в любой комнате

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Нельзя передать столбец как переменную

просто используйте несколько запросов

0 голосов
/ 11 сентября 2018

Вы не передаете предложение where, как в старом android SQLite, вместо этого вы передаете параметры, которые будут использоваться в предложении where.

В Room вы пишете весь запрос, включая предложение where с именованными параметрами, такими какв PHP DBO или Java JDBC, затем передайте параметры при вызове метода.

@Query("SELECT * FROM user WHERE username LIKE :username LIMIT 1")
LiveData<User> findByUserName(String username);

Так что для вашего случая правильный метод будет:

@Query("SELECT products_table.id,products_table.name as productName,products_table.image,variations_table.name as variation,variations_table.id as variation_id,variations_table.default_sell_price as selling_price  from products_table INNER JOIN variations_table ON products_table.id = variations_table.product_id LEFT JOIN variations_locations_details_table as VLD ON variations_table.id = VLD.variation_id WHERE products_table.id = :productId")
LiveData<List<VariedProducts>> getProductsWithVariations(Integer productId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...