JOOQ检查Record对象中的空字段?

时间:2016-12-09 14:34:41

标签: java sql jooq

我在JOOQ中有一个查询,它包含一个LEFT OUTER JOIN和另一个表。这是故意的,因为无法保证会存在相应的记录,在这种情况下,我仍然希望从前一个表中检索值,并提供缺省字段的缺失字段。

但是,由于不推荐使用带有默认参数的getValue()函数,如何检查该字段是否包含NULL值?

使用字符串很容易,但布尔值只返回false,这意味着我无法检查它是否真的被设置为false,或者它只是JOOQ决定返回的内容。

我试过了:

if (record.field(MY_TABLE.SOME_BOOLEAN) != null) {
    ...
}

但这不起作用,因为field()函数的返回值不为null,即使字段的值为。我也试过了

if (record.field(MY_TABLE.SOME_BOOLEAN).isNull()){
   ...
}

但这不是有效的Java条件。

提前致谢!

1 个答案:

答案 0 :(得分:5)

你正在尝试的东西不起作用:

if (record.field(MY_TABLE.SOME_BOOLEAN) != null) {  }

Record.field()将返回Field引用。我们的想法是,您的记录可能尚未从MY_TABLE创建,但可能仍包含SOME_BOOLEAN列,Record.field()将从记录中返回SOME_BOOLEAN列。< / p>

您正在寻找的只是:

if (record.get(MY_TABLE.SOME_BOOLEAN) != null) {  }

请注意,jOOQ无法区分数据库中SOME_BOOLEAN列是否实际为NULL,或者LEFT JOIN是否未返回任何行。这就是SQL的工作原理。如果您想检查LEFT JOIN是否确实找到了子行,您可以检查null列中的NOT NULL值,例如主键:

if (record.get(MY_TABLE.ID) != null) {  }