SqlQuery和SqlFieldsQuery

时间:2016-12-24 03:01:59

标签: ignite

看起来SqlQuery只支持以select *开头的sql?它不支持其他仅选择某些列的sql 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. 拖尾元素是每列的值。

  4. 为什么这么设计?如果我不知道SqlFieldsQuery运行的sql是什么,那么我需要额外的努力来弄清楚List包含的内容。

1 个答案:

答案 0 :(得分:1)

SqlQuery返回键和值对象,而SqlFieldsQuery则允许选择特定字段。使用哪一个取决于您的使用案例。

目前select *确实包含预定义的_key_val字段,将来会有所改进。但是,通常在运行SQL查询时列出要获取的字段是一种很好的做法(对于任何SQL数据库都是如此,不仅仅是Ignite)。这样,例如,在更改模式的情况下,您的代码将受到保护,免受意外行为的影响。