#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 да, я тоже надеюсь, что так будет красивее.