Подтвердить что ты не робот

Как определить, является ли ResultSet пустым или нет в Java?

Как я могу найти, что ResultSet, который я получил, запросив базу данных, пуст или нет?

4b9b3361

Ответ 1

Сразу же после выполнения инструкции execute вы можете иметь оператор if. Например

ResultSet rs = statement.execute();
if (!rs.next()){
//ResultSet is empty
}

Ответ 2

Определенно это дает хорошее решение,

ResultSet rs = stmt.execute("SQL QUERY");
// With the above statement you will not have a null ResultSet 'rs'.
// In case, if any exception occurs then next line of code won't execute.
// So, no problem if I won't check rs as null.

if (rs.next()) {
    do {
      // Logic to retrieve the data from the resultset.
      // eg: rs.getString("abc");
    } while(rs.next());
} else {
    // No data
}

Ответ 3

Сделайте это с помощью rs.next():

while (rs.next())
{
    ...
}

Если набор результатов пуст, код внутри цикла не будет выполняться.

Ответ 4

Если вы используете rs.next(), вы перемещаете курсор, чем вы должны перенести сначала() почему бы не проверить с помощью first() напрямую?

    public void fetchData(ResultSet res, JTable table) throws SQLException{     
    ResultSetMetaData metaData = res.getMetaData();
    int fieldsCount = metaData.getColumnCount();
    for (int i = 1; i <= fieldsCount; i++)
        ((DefaultTableModel) table.getModel()).addColumn(metaData.getColumnLabel(i));
    if (!res.first())
        JOptionPane.showMessageDialog(rootPane, "no data!");
    else
        do {
            Vector<Object> v = new Vector<Object>();
            for (int i = 1; i <= fieldsCount; i++)              
                v.addElement(res.getObject(i));         
            ((DefaultTableModel) table.getModel()).addRow(v);
        } while (res.next());
        res.close();
}

Ответ 5

Вычисляет размер java.sql.ResultSet:

int size =0;
if (rs != null) {
    rs.beforeFirst();
    rs.last();
    size = rs.getRow();
}

(Источник)

Ответ 6

if (rs == null || !rs.first()) {
    //empty
} else {
    //not empty
}

Обратите внимание, что после вызова этого метода, если набор результатов не пуст, он находится в начале.