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

时间:2015-02-05 16:07:40

标签: mysql sql database jsp web

我正在开发一个数据库搜索页面(使用jsp),在这个搜索页面中,用户将有一个下拉列表形式的多个搜索条件/选项,这些选项可以不被选中(换句话说为null) ,如果它们未被选中,则应检索完整列。为了实现这一点,我正在使用ifnull()函数,而我正在使用MySQL。

我面临的问题是SQL似乎无法识别字符串为null,当在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)"

3 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分:0)

尝试设置null:

 prepStmt.setNull(1, Types.VARCHAR)

答案 2 :(得分:0)

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

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

使用主变量时,必须使用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中的常见用法建议只有类名以大写字母开头,变量名应以小写字母开头,因此NameVar应为nameVar