Что возвращает executeQuery (String sql), когда нет результатов? [дубликат]

Возможные Дубликаты:
Как проверить, имеет ли resultset одну строку или более?

что будет executeQuery(String sql) возврат, когда результат SQL-запроса равен нулю строк>? Если он возвращает ResultSet Object, как мы обнаружим, что SQL-запрос ничего не вернул.

предположим, что SQL-запрос является SELECT заявление.

7 ответов


ты следующий метод ResultSet . Первоначально курсор ResultSet указывает на перед первой строкой, самый первый вызов next () возвращает false означает, что в ResultSet не было данных. См.как получить размер результирующего набора?, так как нет прямого метода size() или length() для результирующих наборов в Java.


метод next () набора результатов перемещает курсор в следующую строку и возвращает логическое значение, указывающее, были ли данные прочитаны или нет. Обычно он используется с циклом while

while (myresultset.next()){ //some statement; } В вашем случае первый вызов следующего метода вернет false, если данные не совпадают с запросом.


он вернет ResultSet. Использовать

boolean hasResult = rs.next();

чтобы узнать, есть ли строка результата.


пустой результирующий набор с нулевыми строками, т. е. resultSet.next() возвращает false.


Если ResultSet возвращается пустым, затем вывод первого вызова next() метод на этом ResultSet вернет false.

В основном обычная процедура-это что-то среди строк

ResultSet rs = executeQuery("select ....");
while(rs.next()) {
    //do something with the results
}

он вернется пустым ResultSet Если запрос извлекает 0 записей. Первоначально курсор указывает на перед resultset, когда мы когда-либо вызываем resultset.next() курсор перемещается в next resultset (итератор скороговоркой) и return true Если есть какие-то результаты есть, в противном случае он просто возвращает false. В этом случае первый вызов next() возвращает false.


можно использовать rs.getRow() метод.

 if(rs.getRow() >= 1){
      //Has at least 1 result
    }

источник:

/**
    * Retrieves the current row number.  The first row is number 1, the
    * second number 2, and so on.
    * <p>
    * <strong>Note:</strong>Support for the <code>getRow</code> method
    * is optional for <code>ResultSet</code>s with a result
    * set type of <code>TYPE_FORWARD_ONLY</code>
    *
    * @return the current row number; <code>0</code> if there is no current row
    * @exception SQLException if a database access error occurs
    * or this method is called on a closed result set
    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    * this method
    * @since 1.2
 */
      int getRow() throws SQLException;