Sobes.tech
Junior — Middle
127

Koja je razlika između Query i RawQuery pri korišćenju biblioteke Room?

Компаније где су питане
Viasat tech

Одговор од АИ

sobes.tech АИ

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