Получение количества значений набора результатов

Мне нужен ваш помощник и помощь в подсчете значений, доступных в файле resultset. resultset имеет 22 записи, и в приведенном ниже коде он печатает счет, начиная с 1 до 23. Есть ли способ получить общее количество. записей как 22 (только одно значение) или путем вычитания последнего значения из первого значения?

Мой код ниже:

while (rs.next())
        {

        count=0;
        name1=rs.getString("name");  
                    out.println(rs.getRow());

                 }

Я попытался использовать rs.first() и rs.last(), и это привело к следующей ошибке:

java.sql.SQLException: недопустимая операция для набора результатов только вперед: сначала

Я попытался добавить аргументы в createstatement, но там такое же исключение:

 conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);

java.sql.SQLException: недопустимая операция для набора результатов только вперед: последний

Пожалуйста, помогите мне в вышеуказанном вопросе.


person user3407440    schedule 24.08.2014    source источник
comment
для этого уже есть функция. rs.getRow(). Я не уверен, но похоже.   -  person Nabin    schedule 24.08.2014
comment
это помогает? stackoverflow.com/ вопросы/7886462/   -  person Atul    schedule 24.08.2014


Ответы (2)


Попробуй это:

int rowcount = 0;
if (rs.last()) {
  rowcount = rs.getRow();
  rs.beforeFirst(); 
}

ИЗМЕНИТЬ:

Вам нужно изменить выражение вашего запроса таким образом, чтобы вы могли использовать rs.last()

Statement stmt = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE);
ResultSet rs = stmt.executeQuery("Your query");

Проверьте Документы Oracle.

person Rahul Tripathi    schedule 24.08.2014
comment
почему не resultSet.getRow()? - person Nabin; 24.08.2014
comment
@Nabin: - Это то, что я использовал;) - person Rahul Tripathi; 24.08.2014
comment
я имею в виду, почему бы и нет? - person Nabin; 24.08.2014
comment
@Nabin: - Вы можете, но это хорошая практика - использовать это так! - person Rahul Tripathi; 24.08.2014
comment
Это не решило проблему, я получил эту ошибку: java.sql.SQLException: недопустимая операция для набора результатов только вперед: последний - person user3407440; 24.08.2014
comment
@ Р.Т. Пожалуйста, объясните проблему, упомянутую пользователем 3407440. - person Nabin; 24.08.2014
comment
@user3407440:- ResultSet.last() и другие операции запроса с абсолютной индексацией доступны только в том случае, если набор результатов можно прокручивать. Вам нужно изменить Заявление вашего запроса следующим образом: Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE ); - person Rahul Tripathi; 24.08.2014
comment
@Nabin: - Надеюсь, это поможет! :) - person Rahul Tripathi; 24.08.2014
comment
@R.T Я получил эту ошибку: не могу разрешить символ symbol: метод createStatement (int) расположение: интерфейс java.sql.Connection st1 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE); - person user3407440; 24.08.2014
comment
@user3407440 createStatement принимает как минимум два аргумента, см. документация conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet. ResultSet.CONCUR_READ_ONLY); - person Alex Beggs; 24.08.2014
comment
@Beggs У меня есть исключение: java.sql.SQLException: недопустимая операция для набора результатов только вперед: последний - person user3407440; 25.08.2014
comment
@user3407440 user3407440 вы изменили свой код с conn.createStatement() по умолчанию на код выше? И какую базу данных и драйвер вы используете? - person Alex Beggs; 25.08.2014

Вы можете использовать MySQL count(*)

  try{
      Statement stmt = connection.createStatement();
      String selectquery = "select count(*) from YourTable";
      ResultSet rs = stmt.executeQuery(selectquery);
      rs.next();          
      System.out.println("Amount of rows :" + rs.getInt(1));
    }

Если вы хотите подсчитывать строки на основе «имени», то

try{
          Statement stmt = connection.createStatement();
          String selectquery = "select count(name) from YourTable";
          ResultSet rs = stmt.executeQuery(selectquery);
          rs.next();          
          System.out.println("Amount of rows :" + rs.getInt(1));
        }
person Fevly Pallar    schedule 24.08.2014
comment
Я стараюсь не менять запрос, так как это сложный запрос с более чем 10 полями. - person user3407440; 24.08.2014
comment
В моем решении вам не нужно использовать while (rs.next()) { .. }, это даже не сложно. - person Fevly Pallar; 24.08.2014
comment
Проблема в том, что я использую динамический запрос, и он должен отображать количество на основе имени. это не поможет - person user3407440; 24.08.2014
comment
@ user3407440, см. правку выше. - person Fevly Pallar; 24.08.2014