我正在使用JDBC對Oracle 11g數據庫進行PreparedStatement查詢,並發現傳遞null參數的結果與定義「is null」的結果不同查詢自己。JDBC setNull()與Oracle「空」會產生不同的結果
例如,這個查詢:
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」的情況。
NULL
值進行比較,我似乎無法找到一個更清潔的方式來解決這個不是詳細[這裏]答案(HTTP://計算器.com/questions/4215135/how-to-deal-with-maybe-null-values-in-a-preparedstatement?rq = 1),這將是「WHERE col2 =?OR(col2 IS NULL AND?IS NULL) 」。 –