SqlQuery и SqlFieldsQuery

Похоже, что SqlQuery поддерживает только sql, который начинается с select *? Разве он не поддерживает другие SQL, которые выбирают только некоторые столбцы, такие какselect id, name from person и сопоставляет столбцы с соответствующим POJO?

Если я использую SqlFieldQuery для запуска sql, результатом будет QueryCursor of List(каждый список содержит одну запись результата). Но если sql начинается с select *содержимое этого списка будет отличаться от поля запроса, например:select id,name,age from person

Для select *Каждый список состоит из 3 частей:

  1. первый элемент является ключом кеша

  2. второй элемент - это объект pojo, содержащий данные

  3. хвостовым элементом являются значения для каждого столбца.

Почему это было так задумано? Если я не знаю, какой sql запускает SqlFieldsQuery, мне нужно приложить дополнительные усилия, чтобы выяснить, что содержит список.

1 ответ

Решение

SqlQuery возвращает объекты ключа и значения, а SqlFieldsQuery позволяет выбрать конкретные поля. Какой из них использовать, зависит от вашего варианта использования.

В настоящее время select * действительно включает в себя предопределенный _key а также _val поля, и это будет улучшено в будущем. Однако, как правило, рекомендуется перечислять поля, которые вы хотите получить при выполнении запросов SQL (это верно для любой базы данных SQL, а не только для Ignite). Таким образом, ваш код будет защищен от непредвиденного поведения, например, в случае изменения схемы.

Другие вопросы по тегам