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

Tom*_* M. 1 java sql jooq

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

但是,由于getValue()具有默认参数的函数已被弃用,如何检查该字段是否包含NULL值?

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

我试过了:

if (record.field(MY_TABLE.SOME_BOOLEAN) != null) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

if (record.field(MY_TABLE.SOME_BOOLEAN).isNull()){
   ...
}
Run Code Online (Sandbox Code Playgroud)

但这不是一个有效的Java条件.

提前致谢!

Luk*_*der 5

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

if (record.field(MY_TABLE.SOME_BOOLEAN) != null) {  }
Run Code Online (Sandbox Code Playgroud)

Record.field()将返回Field参考.我们的想法是您的记录可能尚未创建MY_TABLE,但它可能仍包含一SOME_BOOLEAN列,Record.field()将从SOME_BOOLEAN记录中返回该列.

您正在寻找的只是:

if (record.get(MY_TABLE.SOME_BOOLEAN) != null) {  }
Run Code Online (Sandbox Code Playgroud)

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

if (record.get(MY_TABLE.ID) != null) {  }
Run Code Online (Sandbox Code Playgroud)