Sobes.tech
Junior — Middle
122

Quelle est la différence entre Query et RawQuery lors de l'utilisation de la bibliothèque Room?

Entreprises à qui on a demandé
Viasat tech

Réponse de l'IA

sobes.tech IA

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