Есть ли способ отменить пошаговый вызов SQLite3 в C / C ++? - PullRequest
0 голосов
/ 28 марта 2019

Система, с которой я работаю, использует базу данных SQLite3 в качестве фонового хранилища журналов, где каждая запись представляет собой запись из двух столбцов: | time | data |.Воспроизведение журнала так же просто, как подготовка оператора для получения всех записей, и каждый вызов sqlite3_step() возвращает данные за один раз.

С тех пор мы пытались использовать специализированные инструменты для продвижения и пропуска по мере того, как мынужноТеперь мы находимся в ситуации, когда нам нужно вернуться назад на одну или несколько записей.Есть ли способ без сброса и / или создания нового запроса отменить продвижение входа, которое происходит с sqlite3_step()?

sqlite3_reset(), не является подходящим решением, так как это возвращает указатель базы данных обратно кПервая запись в базе данных.Я хочу вернуться к предыдущей записи последнего sqlite3_step() вызова.

1 Ответ

1 голос
/ 29 марта 2019

Есть ли способ без сброса и / или создания нового запроса отменить продвижение входа, которое происходит с sqlite3_step()?

Нет, как в текущей версии (3.27.2) нет.SQLite3 предоставляет только наборы результатов только для пересылки.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...