Android Studio Room и DAO: создание запроса с аргументом where ‘field = condition’

#android #android-room #dao

#Android #android-комната #dao

Вопрос:

В интерфейсе Android Studio DAO этот код:

 @Query("SELECT COUNT(*) FROM StrategyLinks WHERE Id_Property=:condition")
    long countStrategyLinks(String condition);
 

Работает нормально, когда я вызываю:

 MyDao.countStrategyLinks("10");
 

НО мне действительно нужна более общая форма, например:

 @Query("SELECT COUNT(*) FROM StrategyLinks WHERE :condition")
    long countStrategyLinks(String condition);
 

Когда я вызываю:

 MyDao.countStrategyLinks("Id_Property=10");
 

Что вообще НЕ РАБОТАЕТ.
Есть какой-то способ преодолеть эти ограничения? Кроме того, можно ли передать имя таблицы (StrategyLinks в этом примере) в качестве аргумента? Заранее спасибо.

Ответ №1:

вы должны использовать RawQuery так:

  @Dao
 interface RawDao {
   @RawQuery
   long countStrategyLinks(SupportSQLiteQuery query);
 }

 // Usage of RawDao
 SimpleSQLiteQuery query = new SimpleSQLiteQuery(
     "SELECT COUNT(*) FROM StrategyLinks WHERE ?",
     new Object[]{ condition});
 long result = rawDao.countStrategyLinks(query);
 
 

вы можете найти более подробную информацию по этой ссылке

Комментарии:

1. Спасибо! Надеюсь, что когда-нибудь DAO каким-то образом включит эту способность, чтобы все коды запросов оставались в самом DAO.

2. @sgm да, я тоже надеюсь, что так будет красивее.