SQL IfNull() 函数无法识别空字符串

SQL IfNull() function doesn't recognize null strings

我正在开发一个数据库搜索页面(使用jsp),在这个搜索页面用户将以下拉列表的形式进行多个搜索conditions/options,这些选项可以是未选择(换句话说为空),如果它们未被选择,则应检索完整的列。为此,我使用了 ifnull() 函数,并且我使用了 MySQL。

我面临的问题是 SQL 似乎无法识别字符串是否为空,当在 ifnull 函数中传递空字符串时,它会检索空值而不是检索完整值柱子。在查询 "ifnull(NULL,Location)" 中直接传递 NULL 似乎工作得很好。

名单:

       <select name="EX">
            <option value="NULL">Any</option>
            <option value="1">Option1</option>
            <option value="2">Option2</option>
            <option value="3">Option3</option>
        </select>

下一页如何处理值:

String NameVar = new String();
if(request.getParameter("EX") == "NULL"){
NameVar = null;
}
else if(request.getParameter("EX") != "NULL"){
NameVar = request.getParameter("EX");
}

我的查询:

selectItem = connection.prepareStatement("SELECT Location, ItemType "
                + "FROM DBTEST "
                + "WHERE Location = IFNULL(?,Location)"

尝试:

String sql = "SELECT Location, ItemType "
+ "FROM DBTEST "
+ "WHERE Location = IFNULL(?,Location)";
PreparedStatement prepStat = connection.prepareStatement(sql);
prepStat.setString(1, NameVar);

尝试设置为空:

 prepStmt.setNull(1, Types.VARCHAR)

关于 Sas 答案的一些细节。在 SQL 中,null 是一个特殊值,任何 int 或任何一个字符串都不能等于 NULL。

在查询中,您必须使用特殊结构 IS NULL 来测试空值,因为 column = NULL 永远不会为真。

使用 home 变量时,必须使用setNull 方法

将它们明确设置为 NULL

您没有显示如何填充您的查询,但您需要的应​​该不远:

selectItem = connection.prepareStatement("SELECT Location, ItemType "
            + "FROM DBTEST "
            + "WHERE Location = IFNULL(?,Location)");
if (NameVar == null) {
    selectItem.setNull(1, Types.VARCHAR);
}
else {
    selectItem.setString(1, NameVar);
}

顺便说一句,java 中的常见用法建议只有 class 名称以大写字母开头,变量名称应以小写字母开头,因此 NameVar 应该是 nameVar