Как я могу узнать, что ResultSet
, который я получил при запросе к базе данных, пуст или нет?
Как узнать, пустой ResultSet или нет в Java?
Ответы (6)
Сразу после оператора execute у вас может быть оператор if. Например
ResultSet rs = statement.execute();
if (!rs.next()){
//ResultSet is empty
}
person
Paul
schedule
25.02.2010
однако, если набор результатов не пуст, вы переместите курсор, фактически пропустив первую строку.
- person monopoint; 04.12.2014
@Paul Я считаю, что вам следует обновить свой ответ, чтобы завершить его, сбросив курсор непосредственно перед первой строкой в блоке else, если он не пуст, т.е.
else { rs.beforeFirst(); }
- person sactiw; 15.06.2015
Определенно это дает хорошее решение,
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
}
person
purush
schedule
06.12.2011
Сделайте это с помощью rs.next()
:
while (rs.next())
{
...
}
Если набор результатов пуст, код внутри цикла не будет выполняться.
person
Scott Smith
schedule
25.02.2010
Если вы используете rs.next (), вы переместите курсор, чем вы должны переместить first (), почему бы не проверить, используя 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();
}
person
Kachwahed
schedule
25.06.2011
Я согласен. Я добавил свой код ниже (не смог включить код с комментарием).
- person Santosh Tiwari; 01.07.2011
if (rs == null || !rs.first()) { //empty } else { //not empty }
Обратите внимание, что после вызова этого метода, если набор результатов не пуст, он находится в начале.
person
Santosh Tiwari
schedule
01.07.2011
«Так безопаснее», - подумал я.
- person Kachwahed; 04.09.2011
ResultSet никогда не может быть нулевым.
- person red1ynx; 28.12.2011
Вычисляет размер java.sql.ResultSet:
int size = 0;
if (rs != null) {
rs.beforeFirst();
rs.last();
size = rs.getRow();
}
(Источник)
person
Dolph
schedule
25.02.2010
Насколько я знаю, это плохая идея ... во-первых, вам нужно убедиться, что результат может двигаться в обратном направлении, во-вторых, вы получаете удар производительности при этом. Намного быстрее просто использовать набор результатов только вперед и использовать цикл while (как это уже было предложено здесь другими)
- person user85116; 19.04.2010
Согласен ... Я проголосовал за принятый ответ, который отвечает на вопрос гораздо более прямо.
- person Dolph; 20.04.2010
Дольф - ПРИЯТНО !!!!!
- person Michael Sims; 19.11.2017