Начать запрос с определенной строки Java - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь получить результат после определенного количества запросов, т.е.

String sql="Select from mytable where sell_id = 
 '"+purchase_id+"'";
        java.sql.Statement stmt=conn.createStatement();
        java.sql.ResultSet res=stmt.executeQuery(sql);

        while(res > 4){ //this line is where i still couldn't figured out
          String quantity = res.getString("quantity");
          String item = res.getString("item_name");
          String price = res.getString("price");
        }

но он показывает ошибку "неверные типы операндов для двоичного оператора '>'"

| quantity | item   | price |
|    20    | soda   |   5$  |
|    10    | noodle |   7$  |
|     5    | water  |   3$  |
|    15    | gum    |   4$  |
|    14    | tissue |   2$  | 
|     2    | snack  |   6$  |

результат должен быть таким

|    14    | tissue |   2$  | 
|     2    | snack  |   6$  |

любое предложение будет принято

Ответы [ 5 ]

0 голосов
/ 29 августа 2018

Чтобы перейти к 5-му ряду вашего ResultSet, вы можете использовать:

res.absolute(5); 

Поскольку вы вызываете .next () после позиционирования и перед получением данных, ваш код будет работать так:

String sql="Select from mytable where sell_id = 
 '"+purchase_id+"'";
        java.sql.Statement stmt=conn.createStatement();
        java.sql.ResultSet res=stmt.executeQuery(sql);

        res.absolute(4); // will get your cursor to the 4th row

        while(res.next()){ // will get you to the 5th row and continue to the end
          String quantity = res.getString("quantity");
          String item = res.getString("item_name");
          String price = res.getString("price");
        }

Второй альтернативой является использование предложения Limit в вашем операторе select:

String sql="Select from mytable where sell_id = '"+purchase_id+"'" + " limit 4, 9999999999";

Тогда вам не понадобится res.absolute (n), так как первый res.next () отправит вас прямо в пятый ряд. Я предполагаю, что ваша таблица имеет менее 9999999999 строк. Если их больше, используйте большее количество.

Вот документация API для абсолютного (n):

https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html

boolean absolute(int row)
          throws SQLException

Перемещает курсор к указанному номеру строки в этом объекте ResultSet.

Если номер строки положительный, курсор перемещается на заданный номер строки относительно начала набора результатов. Первая строка - это строка 1, вторая - строка 2 и т. Д.

Если заданный номер строки отрицателен, курсор перемещается в абсолютную позицию строки относительно конца набора результатов. Например, при вызове метода absolute (-1) курсор помещается в последнюю строку; вызов метода absolute (-2) перемещает курсор к следующей строке и т. д.

Если указанный номер строки равен нулю, курсор перемещается на перед первой строкой.

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

Примечание. Вызов абсолютного значения (1) аналогичен вызову first (). Вызов абсолютного (-1) аналогичен вызову last ().

Параметры: row - номер строки, в которую должен переместиться курсор Нулевое значение указывает, что курсор будет расположен перед первой строкой; положительное число указывает номер строки, считая с начала набора результатов; отрицательное число указывает номер строки, считая с конца набора результатов Возвращает: Значение true, если курсор перемещен в позицию в этом объекте ResultSet; false, если курсор находится перед первой или последней строкой

Выдает:

SQLException - если ошибка доступа к базе данных происходит; этот метод вызывается для закрытого набора результатов, или тип набора результатов - TYPE_FORWARD_ONLY

SQLFeatureNotSupportedException - если драйвер JDBC не поддерживает этот метод

0 голосов
/ 29 августа 2018

Попробуйте что-то вроде этого:

while(res.next()){ //anything you can think of!! } 
0 голосов
/ 29 августа 2018

То, что вам нужно, должно быть ROW_NUMBER OVER ().

SELECT temp.col1, temp.col2, temp.col3 
FROM
SELECT 
    col1, col2,col3,
    ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS rowNum
FROM Table1 AS temp;
WHERE temp.rowNum > 4;
0 голосов
/ 29 августа 2018

Вы можете использовать счетчик, который будет проверять состояние, как показано ниже:

int counter=1;
while(res.next()){
  if(counter>4){
      String quantity = res.getString("quantity");
      String item = res.getString("item_name");
      String price = res.getString("price");
  }
  counter++;
}
0 голосов
/ 29 августа 2018

Ваша переменная res не является числом. Вы фактически сравниваете объект с числовым литералом, следовательно, вы получаете ошибку. Если вы хотите зациклить свой набор результатов, вы можете сделать это:

while(res.next()){
    // do something here with your data
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...