当前位置: 首页 > 知识库问答 >
问题:

JOOQ“IN”查询引发空指针异常

蒋阳华
2023-03-14

当我们尝试用Null值获取数据时

字段(TABLE_NAME.COLUMN_NAME. in(null))

IN子句获得空指针异常。

也许是因为这个。

  @Override
    public final Condition in(Collection<?> values) {
        Field<?>[] fields = new Field[values.size()];

        Iterator<?> it = values.iterator();
        for (int i = 0; it.hasNext(); i++)
            fields[i] = Tools.field(it.next(), this);

        return in(fields);
    }

在数据库中,我们可以提供null in IN子句。

jooq中存在一个“无法修复”的问题https://github.com/jOOQ/jOOQ/issues/3867

有一些替代方案:

  • 在输入前检查null(在我的情况下,这是一个非常大的select语句)

所以如果我想让这成为可能,还有其他的解决方法吗。

注:类似的情况下,“eq”的效果非常好:

@Override
    public final Condition equal(Field<T> field) {
        return compare(EQUALS, nullSafe(field, getDataType()));
    }

编辑:'field(TABLE_NAME.COLUMN_NAME. in(null))'这里null是一个集合。

共有1个答案

周辰沛
2023-03-14

您的示例代码没有编译:

TABLE_NAME.COLUMN_NAME.in(null)

jOOQ 3.14中的in()方法有5个重载,因此,不能将null文本传递给in()方法。您真正的客户机代码可能使用如下局部变量:

Collection<?> collection = null;
TABLE_NAME.COLUMN_NAME.in(collection)

可能存在这样一种情况,即这应该与传递空集合(例如集合)的行为相同。emptyList(),但这似乎不是您想要的。您可能希望在该集合中传递实际的null值,您可以执行以下操作:

TABLE_NAME.COLUMN_NAME.in(1, null, 2)

但你为什么要这么做?SQL实现了三个值逻辑,这意味着NULL值在IN谓词中没有影响,而在not IN谓词中,它们有一个不直观的、几乎不需要的影响(整个谓词变成NULL

 类似资料:
  • 第一个示例:“源代码”https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/process_function.html“” 我正在尝试重写KeyedProcessFunction类的processElement()。ProcessElement有3个参数,其中一个参数是上下文对象。当我试图从上下文对象

  • 我正在尝试通过Maven运行cucumber+testng+selenium。 当我在Eclipse中通过TestNG测试运行它时,它工作得很好,但当我使用mvn测试时,它会抛出空指针异常 我是不是漏掉了什么?

  • 我想将resultset列表转换为entity类。我的本机查询:

  • 我正在Kura/osgi网站上的“Hello World Example”上开发我的第一个osgi包。 当我想按所述导出项目(导出-可部署插件和片段)时,我会得到以下结果: “导出插件”期间发生内部错误。java.lang.NullPointerException 不幸的是,没有更多的信息。 这似乎与这里描述和“解决”(?)相同,但我真的不知道该怎么做才能解决问题。我正在使用:Win 7(64),

  • 我正在研究leetcode问题编号876,其中表示: 给定一个非空的、带有头节点头的单链表,返回链表的一个中间节点。如果有两个中间节点,则返回第二个中间节点。 到目前为止,这就是我写的,但是它在时循环中抛出了一个空指针异常。我想既然时循环每次都在做任何事情之前检查node.next.next是否为空,它就不会抛出异常。我做错了什么?

  • 让我们考虑一个<代码>父< /代码>类,它只包含一个<代码>整数< /代码>属性。我用一个空变量创建了6个父类对象。然后我将这些对象添加到列表中。 我想通过属性的值检索相应的对象。我使用了Java8流。 但是我得到了,所以我编辑了代码: 但是如果任何对象为null,我想抛出一个异常。如果列表中没有对象为null,那么我想从列表中检索相应的对象。 如何使用Java 8 Streams使用一条语句实现