我正在使用Java 6和Oracle 10。 我有一个java语句,我想测试一个空字符串或空字符串。
我的代码如下所示:
PreparedStatement stmt = null;
String sql = "SELECT table_field FROM table_name WHERE NVL(table_field, '') LIKE ? ";
stmt = connection.prepareStatement(sql);
stmt.setString(myEmptyString, 1);
我的NULL
中有table_field
个值,但执行时我的查询没有返回任何内容。
我错过了什么?
我目前使用WHERE table_field IS NULL
的解决方法,但我也想检查空字符串。
答案 0 :(得分:3)
在Oracle an empty string is the same as null中,NVL(table_field, '')
与NVL(table_field, null)
相同,后者无法实现任何目标。如果该字段为null,则它保持为空。
您也无法将null与任何内容进行比较。如果要在结果集中包含空值,则可以执行以下操作:
WHERE table_field IS NULL OR table_field LIKE ?
如果bind参数可能为null(或空字符串)并且您只想匹配空值,则可以执行以下操作:
WHERE (? IS NULL AND table_field IS NULL) OR (table_field LIKE ?)
但是你需要提供两次绑定值。
使用LIKE
只有在绑定值具有通配符并且您想要查找部分匹配时才有意义。如果您要查找完全匹配,请使用=
代替LIKE
。它可能不会影响结果集,但它可能以意想不到的方式,并使意图更清晰。