我正在针对 Oracle 11g 数据库处理 JDBC 中的 PreparedStatement 查询,发现传递空参数的结果与在查询本身中定义“为空”不同。
例如,这个查询:
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”两种情况。