Sobes.tech
Назад к вопросам
Junior — Middle
83

Какое отличие между Query и RawQuery при использовании библиотеки Room?

Компании, где спрашивали
Viasat tech

Ответ от нейросети

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 — динамические запросы, формируемые во время выполнения, без проверки компилятора.