Как получить размер java.sql.ResultSet? - PullRequest
1 голос
/ 27 февраля 2011

Я хочу получить размер ResultSet внутри цикла while.

Попробовал код ниже, и я получил результаты, которые я хочу. Но, похоже, что-то не так с result.next(), и цикл while зацикливается только один раз, если я делаю это. Как правильно это сделать?

result.first();
while (result.next()){

    System.out.println(result.getString(2));
    System.out.println("A. " + result.getString(5) + "\n" + "B. " + result.getString(6) + "\n" + "C. " + result.getString(7) + "\n" + "D. " + result.getString(8));
    System.out.println("Answer: ");
    answer = inputquiz.next();

    result.last();

    if (answer.equals(result.getString(10))) {
        score++;
        System.out.println(score + "/" + result.getRow());
    } else {
        System.out.println(score + "/" + result.getRow());
    }
}

Ответы [ 5 ]

4 голосов
/ 03 марта 2011

Как правильно это сделать?

Сопоставьте его с List<Entity>. Поскольку ваш код далек от самодокументирования (вы используете индексы вместо имен столбцов), я не могу привести хорошо подходящий пример. Поэтому я возьму Person в качестве примера.

Сначала создайте класс javabean, представляющий все, что содержится в отдельной строке.

public class Person {
    private Long id;
    private String firstName;
    private String lastName;
    private Date dateOfBirth;

    // Add/generate c'tors/getters/setters/equals/hashcode and other boilerplate.
}

(немного приличная среда IDE, подобная Eclipse, может генерировать их автоматически)

Тогда позвольте JDBC выполнить следующую работу.

List<Person> persons = new ArrayList<Person>();

while (resultSet.next()) {
    Person person = new Person();
    person.setId(resultSet.getLong("id"));
    person.setFirstName(resultSet.getString("fistName"));
    person.setLastName(resultSet.getString("lastName"));
    person.setDataOfBirth(resultSet.getDate("dateOfBirth"));
    persons.add(person);
}

// Close resultSet/statement/connection in finally block.

return persons;

Тогда вы можете просто сделать

int size = persons.size();

А потом подставить пример кода

for (int i = 0; i < persons.size(); i++) {
    Person person = persons.get(i);
    System.out.println(person.getFirstName());
    int size = persons.size(); // Do with it whatever you want.
}

Смотри также:

2 голосов
/ 27 февраля 2011

Это сложный вопрос.

  1. Обычно, result.last() прокручивается до конца ResultSet, и вы не можете вернуться назад.

  2. Если вы создали инструкцию, используя один из методов createStatement или prepareStatement с параметром "resultSetType", и вы установили параметр на ResultSet.TYPE_SCROLL_INSENSITIVE или ResultSet.TYPE_SCROLL_SENSITIVE, то вы можете прокрутить ResultSet с использованием first() или relative() или некоторых других методов.

Однако я не уверен, что все базы данных / драйверы JDBC поддерживают прокручиваемые результирующие наборы, и это может повлиять на производительность. (Прокручиваемый набор результатов подразумевает, что либо базе данных, либо JVM необходимо где-то буферизовать весь набор результатов ... или пересчитать его ... и это дорого для большого набора результатов.)

2 голосов
/ 27 февраля 2011

Вы можете сделать result.last(); и позвонить result.getRow(); (который получает текущий номер строки), чтобы получить счет.но он будет загружать все строки, и если это большой набор результатов, он может быть не очень эффективным.Лучший способ сделать это - сделать SELECT COUNT(*) по вашему запросу и получить количество, как показано в этой записи , заранее.

1 голос
/ 28 августа 2014

Способ получения размера ResultSet, нет необходимости использовать ArrayList и т. Д.

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

Теперь Вы получите размер, и если вы хотите распечатать ResultSet, перед печатью используйте также следующую строку кода,

rs.beforeFirst();  
0 голосов
/ 27 февраля 2011

Есть и другой способ получить счет из БД.

Примечание: Этот столбец обновляется, когда администратор базы данных делает статистику в реальном времени

select num_rows from all_Tables where table_name ='<TABLE_NAME>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...