Ответ
Query и RawQuery в Room используются для выполнения SQL-запросов, но с разными уровнями абстракции:
@Query- Компилятор проверяет синтаксис SQL на этапе компиляции.
- Поддерживает связывание параметров через
:paramName. - Возвращает типизированные результаты (например,
List<User>).
@Query("SELECT * FROM users WHERE age > :minAge")
fun getUsersOlderThan(minAge: Int): List<User>
@RawQuery**- Принимает SQL как строку (динамические запросы).
- Нет проверки синтаксиса на этапе компиляции.
- Используется с
SupportSQLiteQuery. - Полезен для сложных динамических запросов.
@RawQuery
fun getUsers(query: SupportSQLiteQuery): List<User>
// Использование
val query = SimpleSQLiteQuery("SELECT * FROM users WHERE name LIKE ?", arrayOf("%John%"))
val users = dao.getUsers(query)
Итог: Query — для статических запросов с проверкой, RawQuery — для динамических.