Back to questions
Junior — Middle
82
Какое отличие между Query и RawQuery при использовании библиотеки Room?
Companies where asked
Viasat tech
Answer from AI
sobes.tech AI
В библиотеке Room для Android аннотация @Query используется для написания SQL-запросов, которые компилируются и проверяются на этапе компиляции. Это позволяет избежать ошибок в запросах и обеспечивает типобезопасность.
RawQuery же применяется для выполнения динамических или сложных SQL-запросов, которые нельзя выразить через @Query. Он принимает объект SupportSQLiteQuery, позволяющий формировать запросы во время выполнения. Однако такие запросы не проверяются на этапе компиляции, что повышает риск ошибок.
Пример использования RawQuery:
@Dao
interface UserDao {
@RawQuery
fun getUsersViaRawQuery(query: SupportSQLiteQuery): List<User>
}
// Создание запроса во время выполнения
val query = SimpleSQLiteQuery("SELECT * FROM users WHERE age > ?", arrayOf(18))
val users = userDao.getUsersViaRawQuery(query)
Итого:
@Query— статичные, проверяемые на этапе компиляции запросы.@RawQuery— динамические запросы, формируемые во время выполнения, без проверки компилятора.