Pet*_*ter 3 java oracle null jdbc
我正在针对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();
Run Code Online (Sandbox Code Playgroud)
与此查询不同:
String sql = "SELECT col1 FROM tbl WHERE col2 is null";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setNull(1, java.sql.Types.INTEGER);
ps.execute();
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么会这样,我怎么能避免定义两个单独的SQL语句来涵盖"col2 = value"和"col2 is null"的情况.
这与Java无关,实际上,这就是NULL在Oracle中的工作原理.
与任何东西(甚至是NULL)相比,NULL总是为false,您必须使用IS NULL.
这也将不返回任何行:
SELECT col1 FROM tbl WHERE col2 = NULL
Run Code Online (Sandbox Code Playgroud)
甚至
SELECT col1 FROM tbl WHERE NULL = NULL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5047 次 |
| 最近记录: |