我正在 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/