JDBC setNull()与Oracle“ is null”会产生不同的结果

问题描述 投票:3回答:3

[我正在针对Oracle 11g数据库在JDBC中使用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 oracle jdbc null
3个回答
6
投票

与Java无关,实际上,这是NULL在Oracle中的工作方式。

与任何东西相比(甚至与NULL相比,NULL始终为false,必须使用IS NULL。

这也将不返回任何行:

SELECT col1 FROM tbl WHERE col2 = NULL

甚至

SELECT col1 FROM tbl WHERE NULL = NULL

2
投票

我相信ps.setNull(1, java.sql.Types.INTEGER)用于将[[插入 NULL数据值插入数据库。

如果要在SQL查询中搜索IS NULL数据值,则应使用NULL。>>

毕竟,col2 = NULL也不起作用,因为您无法使用NULL比较=的值


0
投票
如果您肯定使用的是Oracle数据库,那么您可以使用此语句,它也将接受NULL等于NULL:
© www.soinside.com 2019 - 2024. All rights reserved.