#java #sqlite #resultset
#java #sqlite #результирующий набор
Вопрос:
Я использую SQLite
db для хранения набора данных и использую оператор запроса для получения результирующего набора, который содержит данные (например), как показано ниже,
0,3,4,88,6,66,77,4,3,5,88
Я использую ,
while(rs.next){ //rs is result set
if(!rs.next){
// if last element do something
}
}
Таким образом, я могу получить последний элемент, но каждый раз, когда выполняется цикл, результирующий набор увеличивается дважды, один раз в while и другой в if (через rs.next
). Я не могу этого сделать rs.previous
, поскольку SQLite его не поддерживает.
Редактировать:
Мне нужно проверить, является ли элемент последней записью в результирующем наборе (не по значению последней записи, поскольку результирующий набор также может содержать повторяющиеся значения).
Могу ли я каким-либо образом добиться этого??
Пожалуйста, помогите.
Комментарии:
1. вы должны иметь возможность изменять запрос, чтобы возвращать только последнюю запись
2. @JigarJoshi Я не могу использовать значение последней записи, поскольку оно также может содержать повторяющиеся значения.
3. @user3164187 Я думаю, вам нужно уточнить этот момент, потому что, как читается ваш вопрос, вы просто хотите получить последний результат из
ResultSet
4. @user3164187 Если я правильно понимаю, если число существует в качестве последнего элемента, но имеет дубликат где-то посередине, это число нельзя рассматривать как решение. Итак, по сути, это означает, что вы пытаетесь найти последний отдельный элемент результирующего набора. Это правильно?
5. @kusur Yeah! вот что я пытался вставить в свой вопрос..
Ответ №1:
Надеюсь, это поможет вам
boolean recordsAvailable = false;
int lastRecord = 0;
recordsAvailable = rs.next;
while (recordsAvailable)
{
lastRecord = rs.getInt("MY_VALUE");
// Do all actions here...
....
// Towards the end of the loop,
if (rs.next)
{
// Records available
}
else
{
// Last record
// Do actions with the variable lastRecord
recordsAvailable= false;
}
}
Комментарии:
1. Но вы снова дважды перепрыгнули
rs.next
, а затемrs.next
перейдете ко второй записи, прежде чем вы даже посмотрите на первую запись…2. @MadProgrammer: Следующий rs.next будет вызван ближе к концу цикла while. Я отредактировал ответ. Надеюсь, теперь это имеет смысл!
Ответ №2:
Если вы не можете переместить курсор (в последнюю позицию), вам просто нужно выполнить итерацию до конца…
int lastValue = -1;
while(rs.next){ //rs is result set
lastValue = ...;
}
Это должно записать последнее значение, которое вы извлекаете из результирующего набора.
Обновлено
Это зависит от вашей структуры таблицы, но вы могли бы попробовать что-то вроде…
SELECT Column1
FROM tbl
GROUP By Column1
HAVING COUNT(*) = 1
Который, основываясь на вашем примере ввода, выдает…
| Column1 |
|---------|
| 0 |
| 5 |
| 6 |
| 66 |
| 77 |
чтобы удалить все повторяющиеся значения из запроса…
И…
Если вы чувствуете себя действительно необычно…
SELECT Column1
FROM tbl
GROUP By Column1
HAVING COUNT(*) = 1
order by Column1 DESC LIMIT 1
Который изменит порядок выбора и вернет только первое значение ( 77
на основе вашего примера).
Это означает, что вам нужно только сделать…
if (rs.next()) {
// Get value from the result set...
}
вместо того, чтобы пройти весь путь до конца ResultSet
Комментарии:
1. Результирующий набор также может содержать повторяющиеся значения .. если 8 — последнее значение, оно может быть и в какой-то другой позиции.
2. И? Извините, я, возможно, пропустил суть, вы хотели последний элемент, не так ли?