gpt4 book ai didi

java - JDBC setNull() 与 Oracle "is null"产生不同的结果

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:14:19 24 4
gpt4 key购买 nike

我正在 JDBC 中针对 Oracle 11g 数据库执行 PreparedStatement 查询,发现传递 null 参数的结果与在查询本身中定义“is null”不同。

例如,这个查询:

String sql = "SELECT col1 FROM tbl WHERE col2 = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setNull(1, java.sql.Types.INTEGER);
ps.execute();

不同于此查询:

String sql = "SELECT col1 FROM tbl WHERE col2 is null";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setNull(1, java.sql.Types.INTEGER);
ps.execute();

我很好奇为什么会这样,以及如何避免定义两个单独的 SQL 语句来涵盖“col2 = value”和“col2 is null”两种情况。

最佳答案

这与 Java 无关,真的,这就是 NULL 在 Oracle 中的工作方式。

与任何事物(甚至与 NULL)相比,NULL 始终为假,您必须使用 IS NULL。

这也不会返回任何行:

SELECT col1 FROM tbl WHERE col2 = NULL

甚至

SELECT col1 FROM tbl WHERE NULL = NULL

关于java - JDBC setNull() 与 Oracle "is null"产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10990749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com