我正在开发一个数据库搜索页面(使用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)"
答案 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