Как проверить набор результатов пуст или ноль в Java - PullRequest
0 голосов
/ 21 мая 2019

У меня есть запрос sql для выполнения в моем java-классе (сервлете), что я пытаюсь сделать, если в базе данных нет данных для этого запроса, а затем хочу сделать что-то еще.

В простомусловия, которые я проверяю, если в результирующем наборе нет данных, которые хотят сделать что-то еще, но это не работает

Что я пробовал

String str = null;
    Gson gson = new Gson();
    LinkedHashMap<Object, Object> lhm = null;
    LinkedList<LinkedHashMap<Object, Object>> mainList = new LinkedList<LinkedHashMap<Object, Object>>();

    String sql;

    try {
        Connection con = DBConnection.createConnection();
        Statement statement = con.createStatement();

        sql = "select distinct a.DISPLAYCOUNTERNAME from DISPLAYCOUNTERNAMES a,DISPLAYCOUNTER b where a.DISPLAYCOUNTERCODE=b.DISPLAYCOUNTERCODE and USERNAME='"
                + userName + "'";

        System.out.println(sql);
        ResultSet resultSet = statement.executeQuery(sql);

        if (!resultSet.isBeforeFirst()) { // if there is no data
            lhm = new LinkedHashMap<Object, Object>();
            lhm.put("outlet", "NoData");
            mainList.add(lhm);
            str = gson.toJson(mainList);
        }

            while (resultSet.next()) { // if there is data
                lhm = new LinkedHashMap<Object, Object>();
                counterName = resultSet.getString("DISPLAYCOUNTERNAME");
                 System.out.println("counternam"+counterName);
                lhm.put("Counter name", counterName);

                mainList.add(lhm);
                str = gson.toJson(mainList);

            }


        System.out.println(str);
        response.setContentType("application/json");
        response.getWriter().write(str);

    } catch (SQLException e) {
        System.out.println("SQL Issues 2...");
        e.printStackTrace();
    }

Приведенный выше кодвыдает ошибку как SQL Issues 2... java.sql.SQLException: This method should only be called on ResultSet objects that are scrollable (type TYPE_SCROLL_INSENSITIVE).

Я не знаю, что я делаю не так, любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Вы можете использовать next, но переключиться на цикл do / while, если первый вызов next возвращает true, тогда указатель строки указывает на первую строку в наборе результатов, поэтому вы должны прочитать его перед вызовом next снова

if (!resultSet.next()) { 
   // do no data stuff
} else { 
    do { 
      //handle result set data
    } while (rs.next()); 
}
0 голосов
/ 21 мая 2019

Вы можете попробовать изменить строку:

Statement statement = con.createStatement();

до

Statement statement = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
                                          ResultSet.CONCUR_READ_ONLY);
...