2016-10-19 5 views
-2

Я пытаюсь захватить размер ResultSet. Теперь, поскольку я использую SQLite, а SQLite поддерживает только курсоры TYPE_FORWARD_ONLY, я пытаюсь понять, как захватить его размер, не вызывая ошибки. Это не будет работать:Получите размер ResultSet в Java для SQLite

int size = 0;  
rs.last(); 
size = rs.getRow(); 

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

Я также попытался создать метод Loop While, чтобы справиться с этим, и это до сих пор, кажется, не работать

public static int getResultSetSize(ResultSet rs) throws SQLException{ 
    int size = 0; 

    while(rs.next()){ 
     size++; 
    } 

    return size; 
} 

Любая помощь будет оценена.

EDIT:

Я попытался следующие без успеха

ResultSet rs = DBHelpers.getResultSet("SELECT COUNT(*) FROM USERS;"); 
    int count = 0; 

    try { 
     count =rs.getInt(0) ; 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Вспомогательный метод для этого является следующим:

public static ResultSet getResultSet(String sql){ 
    ResultSet rs = null;; 
     try (Statement stmt = conn.createStatement()){ 
       rs = stmt.executeQuery(sql); 
     } catch (SQLException e) { 
      System.out.println(e.getMessage()); 
      return null; 
     } 
     return rs; 
    } 

Конн является статическая переменная соединения инициализирован в программа указывает на правильную базу данных и не вызывает никаких проблем.

ответ

1

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

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

+0

Я пробовал подсчет, но он говорит, что результирующий набор закрыт когда я отправляюсь назначать его int. – Jrawr

+0

Я считаю, что ваша проблема в ваших попытках с ресурсами. Rs закрывается в конце. Удалите попытку с помощью ресурсов и убедитесь, что вы используете createStatement всегда вместо повторного использования одних и тех же rs. – facundop

+0

Фактически удаление блока catch try помогло, и оно работает сейчас. Спасибо. – Jrawr

0

Сделайте подсчет по базе данных по тому же запросу ... SELECT Count(*) your query....

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

+0

Что делать es, которые возвращаются точно? Int? – Jrawr

+0

@Jrawr вернет результирующий набор с полем, содержащим ваш счетчик. Вы можете сделать 'resultSet.getInt (0)' ... – brso05

+0

Я получаю это исключение, когда я это делаю: – Jrawr

1

Колонка начинается с индексом 1. Try это ...

Удаляет точку с запятой из вашего запроса

ResultSet rs = DBHelpers.getResultSet("SELECT COUNT(*) FROM USERS"); 

А потом

while (rs.next()) { 
      System.out.println(rs.getInt(1)); 
     } 

Вместо

count =rs.getInt(0);