Java resultset if no result

Java ResultSet, как проверить, есть ли какие-либо результаты

Правильно, сначала курсор ResultSet указывает перед первой строкой, если первый вызов next() возвращает false , тогда в ResultSet не было данных. Если вы используете этот метод, вам может потребоваться позвонить beforeFirst() сразу после reset, так как он уже проложил себе первую строку. Следует отметить, что Ответ Seifer ниже — более элегантное решение этого вопроса.

Но имейте в виду, если есть / есть / строки, после этого теста вы будете указывать на первый ряд. Поэтому убедитесь, что вы случайно не пропустите строку.

@MatthewFlaschen MatthewFlaschen, вы правы, чтобы решить проблему пропуска первой строки, я использовал do <. >while (rs.next);

Вы также можете просто вызвать isBeforeFirst() чтобы проверить, есть ли какие-либо строки, возвращенные без перемещения курсора, а затем продолжить работу в обычном режиме.

Предполагая, что вы работаете с недавно возвращенным ResultSet , курсор которого указывает перед первой строкой, более простой способ проверить это — просто вызвать isBeforeFirst() . Это позволяет избежать необходимости отслеживания, если данные должны быть прочитаны.

Как объясняется в документации, это возвращает false, если курсор не находится перед первой записью, или если нет строк в ResultSet.

if (!resultSet.isBeforeFirst() )

Спасибо, да, я знаю, но я столкнулся с той же проблемой и был недоволен тем, как двигаться вперед, чтобы проверять, а потом назад, чтобы читать. Я думал, что это более простое решение пойдет на пользу другим, кто находится в такой же ситуации.

Читайте также:  Aes algorithm in java

Обратите внимание, что по крайней мере для DB2 набор результатов должен быть «прокручиваемым». Это может быть установлено при создании оператора для выполнения.

Из документации Oracle: Примечание. Поддержка метода isBeforeFirst является необязательной для ResultSets с типом набора результатов TYPE_FORWARD_ONLY

вы всегда можете сделать следующий фронт и просто выполнить проверку контура почты

if (!resultSet.next() ) < System.out.println("no data"); >else < do < //statement(s) >while (resultSet.next()); > 

Обычно вы делаете что-то вроде этого:

Если вы хотите сообщить пустой набор, добавьте переменную, подсчитывающую прочитанные элементы. Если вам нужно только прочитать один элемент, то ваш код будет достаточным.

В соответствии с наиболее жизнеспособным ответом предлагается использовать «isBeforeFirst()». Это не лучшее решение, если у вас нет «только для прямого типа» .

Есть метод, называемый . first() «. Это меньше перепроизводства, чтобы получить тот же результат. Вы проверяете, есть ли что-то в вашем» наборе результатов» и не продвигайте курсор.

В документации указано: «(. ) false, если в результирующем наборе нет строк.

Вы также можете просто вызвать isBeforeFirst(), чтобы проверить, есть ли какие-либо строки, возвращенные без продвижения курсора, а затем продолжить нормально. — SnakeDoc Sep 2 ’14 в 19:00

Однако существует разница между «isBeforeFirst()» и «first()». Сначала генерирует исключение, если оно сделано на наборе результатов, из типа «только вперед».

Хорошо, в основном это означает, что вы должны использовать «isBeforeFirst», если у вас есть тип «только вперед». В противном случае это меньше переполняет использование «first()».

Как «меньше перебор», чтобы получить точно такой же результат? Мне кажется, что цель first () — переместить курсор в первую строку, если ее там еще нет (и вернуть true, если это удалось). isBeforeFirst является чисто диагностической функцией и кажется более подходящей для целей автора. Плюс, способ first () сформулирован, он возвращает true, если он «в допустимой строке» . что странно, так как можно подумать, что он будет сформулирован как «в первой строке». Для меня, я не вижу преимущества использования first () в этом сценарии, если ваш курсор не продвинулся и вы не хотите вернуть его в начало.

Лучше всего использовать ResultSet.next() вместе с синтаксисом do <. >while() для этого.

Вызов ResetSet.next() переводит курсор в первую строку, поэтому используйте синтаксис do <. >while() для обработки этой строки, продолжая обрабатывать оставшиеся строки, возвращаемые цикл.

Таким образом, вы можете проверить любые результаты и одновременно обработать все полученные результаты.

if(resultSet.next()) < // Checks for any results and moves cursor to first row, do < // Use 'do. while' to process the first row, while continuing to process remaining rows >while (resultSet.next()); > 

Источник

Java and mysql query check if result is empty

I am using this to check if the result zoeken is empty, but it throws an exception saying its illegal to do that regardless if it works or not. What is a better solution to check if result is empty or not

6 Answers 6

// I am using this to check if the result»zoeken» is empty, but it throws an exception saying its illegal to do that. regardless if it works or not

Don’t invoke ResultSet.getRow() before you invoke ResultSet.next().

A ResultSet object maintains a cursor pointing to its current row of data. Initially the cursor is positioned before the first row. The next method moves the cursor to the next row, and because it returns false when there are no more rows in the ResultSet object, it can be used in a while loop to iterate through the result set.

 ResultSet zoeken = stat.executeQuery("SELECT * FROM leden WHERE naam = '" + text + "'"); boolean val = zoeken.next(); //next() returns false if there are no-rows retrieved if(val==false) < System.out.println("zoken is empty"); //prints this message if your resultset is empty >while(val) 

If your result set is empty zoeken.next() will return false in which case your while loop will not execute.

An Advice

use PreparedStatement Instead of simple Statement. simple statement would lead to SQL Injection and also would ease the pain for writing complex queries.Below is the sample code which use PreparedStatement.

String yourquery ="Select whatever From table where col1= ? and col2 =?" PreparedStatement stmnt = Conn.preparedStatement(yourquery); stmnt.setString(1, "val1"); stmnt.setString(2, "val2"); 

Источник

what is the value of resultset ,if query does not return any record?

Vanita: you have asked 13 questions and accepted 0 answers. People don’t want to help you if you don’t accept answers.

2 Answers 2

According to the javadoc, Statement.executeQuery() never returns null . So the answer is a ResultSet with no rows.

You can tell that the ResultSet is empty if next() returns false the first time you call it.

You may also be able to tell by calling the optional isAfterLast() method. If it is supported, this method will give you an answer without advancing the cursor as a side-effect.

I’ve no idea what the answer would be for your code, since you are calling an execute method whose implementation you have not provided.

You can detect a ResultSet with no rows by calling next() on it, and it will return false even for the first row.

ResultSet executeQuery(String sql) throws SQLException Executes the given SQL statement, which returns a single ResultSet object.

Parameters: sql — an SQL statement to be sent to the database, typically a static SQL SELECT statement

Returns: a ResultSet object that contains the data produced by the given query; never null

Throws: SQLException — if a database access error occurs, this method is called on a closed Statement or the given SQL statement produces anything other than a single ResultSet object

if(resSet.last().getRow() > 0) < resSet.first(); while(resSet.next()) < colValidRecord.add(resSet.getString("DESTINATIONGROUPID")); >> else < //. 

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.21.43541

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Оцените статью