SqlQuery 和 SqlFieldsQuery

SqlQuery and SqlFieldsQuery

好像SqlQuery只支持以select *开头的sql?它不支持其他 sql 仅 select 某些列,例如 select id, name from person 并将列映射到相应的 POJO?

如果我使用SqlFieldQuery 来运行 sql,结果是一个List 的QueryCursor(每个List 包含一条结果记录)。但如果 sql 以 select * 开头,则此列表的内容将与字段查询不同,例如: select id,name,age from person

对于select *,每个List由3部分组成:

  1. 第一个元素是缓存的键

  2. 第二个元素是包含数据的pojo对象

  3. 尾部元素是每列的值。

为什么要这样设计?如果我不知道 SqlFieldsQuery 运行s 的 sql 是什么,那么我需要额外的努力来找出列表包含的内容。

SqlQuery returns 键和值对象,而 SqlFieldsQuery 允许 select 特定字段。使用哪一个取决于您的用例。

目前select *确实包含了预定义的_key_val字段,以后会完善。但是,通常在 运行 SQL 查询时列出要获取的字段是一个好习惯(这对任何 SQL 数据库都是如此,不仅是 Ignite)。这样一来,您的代码将免受意外行为的影响,例如,如果模式发生更改。