Я работаю над запросом PreparedStatement в JDBC в отношении базы данных Oracle 11g и обнаруживаю, что результаты передачи нулевого параметра отличаются от определения «равно нулю» в сам запрос.JDBC setNull() против Oracle «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 - null».
Я не могу найти более рациональный способ решения этой проблемы, чем ответ подробно [здесь] (Http: // StackOverflow .com/questions/4215135/how-to-deal-with-maybe-null-values-in-a-readystatement? rq = 1), который будет «WHERE col2 =? OR (col2 IS NULL AND? IS NULL) ». –