【发布时间】:2012-06-12 04:58:48
【问题描述】:
我正在 JDBC 中针对 Oracle 11g 数据库进行 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”两种情况。
【问题讨论】:
-
我似乎找不到比详细答案here 更简洁的方法来解决这个问题,答案是“WHERE col2 = ? OR (col2 IS NULL AND ? IS NULL)”。