美好的一天!
我想知道如果我想确定我的搜索是否存在,如何在if-else statement
中获得所需的结果。我做了之前与之相关的问题所建议的各种组合,但我仍然无法得到我想要的东西。
代码1:如果我的搜索为空,我无法访问else语句...
if (resultSet!= null) {
while (resultSet.next()) { //MULTIPLE VALUE SEARCH
Product product = new Product();
product.setProductId(resultSet.getInt("productId"));
product.setProductName(resultSet.getString("productName"));
productList.add(product);
}
request.setAttribute("productList", productList);
RequestDispatcher rd = request.getRequestDispatcher("adminViewSearch.jsp");
rd.forward(request, response);
} else {
request.setAttribute("message", "Search Failed"):
RequestDispatcher rd = request.getRequestDispatcher("adminViewSearch.jsp");
rd.forward(request, response);
}
代码2:我也不能达到应该显示搜索值的else语句......
if (!resultSet.next()) {
.... Search Failed Message
} else {
while(result.next()){.....
}
代码3:与案例1相同的结果:
if (resultSet.wasNull()) {
.... Search Failed Message
} else {
while(result.next()){.....
}
我尝试了其他组合但仍然无法达到我想要的结果,如下所示: 当用户搜索某个值时,如果结果集为空,则会显示错误消息,否则如果搜索不为空,则会显示1个或多个搜索。
请给我一个关于如何更容易的方法,因为看起来我做错了。
提前谢谢..
答案 0 :(得分:6)
一种可能的,但不是很优雅的解决方案是
if (!resultSet.next()) {
.... Search Failed Message
} else {
do {
...
} while (resultSet.next());
}
但是,如果你需要填写一个列表,也许Jigar Joshi的解决方案会更好。
答案 1 :(得分:4)
:
if(productList.size() == 0 ){
request.setAttribute("message", "Search Failed"):
}else{
request.setAttribute("productList", productList);
}
RequestDispatcher rd = request.getRequestDispatcher("adminViewSearch.jsp");
rd.forward(request, response);
或更合适的方式只需设置
if (resultSet!= null) {
while (resultSet.next()) {
Product product = new Product();
product.setProductId(resultSet.getInt("productId"));
product.setProductName(resultSet.getString("productName"));
productList.add(product);
}
request.setAttribute("productList", productList);
RequestDispatcher rd = request.getRequestDispatcher("adminViewSearch.jsp");
rd.forward(request, response);
}
和jsp
<c:if test="${fn:length(companies) gt 0}">
<!--display collection using c:foreach -->
</c:if>
<c:if test="${fn:length(companies) eq 0}">
Search failed
</c:if>
答案 2 :(得分:2)
试试这个:
boolean searchEmpty = true;
while (resultSet.next()) {
//create objects
searchEmpty = false;
}
if (searchEmpty) {
//set error message.
}
答案 3 :(得分:1)
使用可滚动的ResultSet:
Statement stmt= con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT a, b from TABLE2");
然后,您可以调用rs.beforeFirst()
一直移回结果集的顶部。
答案 4 :(得分:1)
您可以使用ResultSet.getRow()返回行数,如果返回零则没有产品。而且你可以进行进一步的操作。
答案 5 :(得分:1)
if(rs !=null)
{
if(rs.isBeforeFirst() && rs.isAfetrLast())
{
out.println("row is empty");
}
else
{
while(rs.next())
{
//execute your code
}
}
}
else{ out.println("row is null");}