Как определить, пуст ли набор результатов?

55
7

Добрый день!


Мне интересно, как я могу получить желаемый результат в моем 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 или несколько запросов.


Просьба дать мне альтернативу, как это сделать проще, потому что кажется, что я делаю это неправильно.


Спасибо заранее.

спросил(а) 2020-04-04T01:03:39+03:00 3 месяца назад
1
Решение
102

Одно возможное, хотя и не очень элегантное решение -


if (!resultSet.next()) {
.... Search Failed Message
} else {
do {
...
} while (resultSet.next());
}

Однако, если вам нужно заполнить список в любом случае, возможно, решение Jigar Joshi будет лучше.

ответил(а) 2020-04-04T01:18:07.620271+03:00 3 месяца назад
86

в коде 1:


    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>

ответил(а) 2020-04-04T01:03:39+03:00 3 месяца назад
67

Попробуйте следующее:


boolean searchEmpty = true;

while (resultSet.next()) {
//create objects
searchEmpty = false;
}

if (searchEmpty) {
//set error message.
}

ответил(а) 2020-04-04T01:03:39+03:00 3 месяца назад
54

  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");}

ответил(а) 2020-04-04T01:03:39+03:00 3 месяца назад
54

Вы можете использовать ResultSet.getRow(), который возвращает количество строк, и если он возвращает ноль, чем нет продуктов. И чем вы можете выполнять дальнейшие операции.

ответил(а) 2020-04-04T01:03:39+03:00 3 месяца назад
55

Используйте прокручиваемый ResultSet:


 Statement stmt= con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  
ResultSet rs = stmt.executeQuery("SELECT a, b from TABLE2");

Затем вы можете вызвать rs.beforeFirst(), чтобы вернуться к началу набора результатов.

ответил(а) 2020-04-04T01:03:39+03:00 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема