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 частей:
первый элемент является ключом кеша
второй элемент - это объект pojo, содержащий данные
хвостовым элементом являются значения для каждого столбца.
Почему это было так задумано? Если я не знаю, какой sql запускает SqlFieldsQuery, мне нужно приложить дополнительные усилия, чтобы выяснить, что содержит список.
1 ответ
SqlQuery
возвращает объекты ключа и значения, а SqlFieldsQuery
позволяет выбрать конкретные поля. Какой из них использовать, зависит от вашего варианта использования.
В настоящее время select *
действительно включает в себя предопределенный _key
а также _val
поля, и это будет улучшено в будущем. Однако, как правило, рекомендуется перечислять поля, которые вы хотите получить при выполнении запросов SQL (это верно для любой базы данных SQL, а не только для Ignite). Таким образом, ваш код будет защищен от непредвиденного поведения, например, в случае изменения схемы.