java语句、oracle nvl、LIKE比较

标签 java oracle jdbc

我正在使用 Java 6 和 Oracle 10。 我有一个 java 语句,我想测试 null 或空字符串。

我的代码如下所示:

PreparedStatement stmt = null;
String sql = "SELECT table_field FROM table_name WHERE NVL(table_field, '') LIKE ? ";
stmt = connection.prepareStatement(sql);
stmt.setString(myEmptyString, 1);

我的 table_field 中有 NULL 值,但我的查询在执行时不返回任何内容。 我缺少什么?

我目前使用 WHERE table_field IS NULL 的解决方法,但我也想检查空字符串。

最佳答案

在 Oracle 中 an empty string is the same as null ,因此 NVL(table_field, '')NVL(table_field, null) 相同,但没有实现任何目标。如果该字段为空,则它保持为空。

您也不能将 null 与任何内容进行比较。如果你想在结果集中包含空值,那么你可以这样做:

WHERE table_field IS NULL OR table_field LIKE ?

如果绑定(bind)参数可能为空(或空字符串),并且您只想匹配空值,那么您可以这样做:

WHERE (? IS NULL AND table_field IS NULL) OR (table_field LIKE ?)

但是您需要提供两次绑定(bind)值。

仅当您绑定(bind)的值具有通配符并且您想要查找部分匹配项时,使用 LIKE 才有意义。如果您正在寻找完全匹配的内容,请使用 = 而不是 LIKE。它可能不会影响结果集,但可能会以意想不到的方式影响,并且它使意图更加清晰。

关于java语句、oracle nvl、LIKE比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36595305/

相关文章:

Java Streams - 缓冲巨大的流

java - 如何将 Android 应用程序上传到市场?

java - PCM 波形文件 - 立体声到单声道

database - 编译包体时出现 PLS-00324 错误

sql - PLS-00488 : object "string" must be a type or subtype - but it is a type

ruby-on-rails - 尝试使用 bundle install 安装 ruby​​ oci8,我尝试单独安装它仍然无法正常工作

oracle - oracle 8i的jdbc驱动选择

java - 使用 Entity Manager 的 Spring junit 测试不会在 H2 文件系统数据库中插入数据

Tomcat 连接池、maxActive 和 maxWait 属性

jdbc - 由于设置类路径,java程序无法运行