Sqlite - вставка строк во время чтения - PullRequest
0 голосов
/ 29 октября 2010

Представьте, что у меня есть 3 строки в таблице sqlite.

При чтении этих 3 строк я также хочу вставить новые строки в зависимости от значений в этих 3 строках.

Я делаю выборна этих строках и используйте функцию sqlite3_step для получения каждой строки.

Проблема в том, что sqlite3_step просматривает более 3 раз, я думаю, потому что он также видит вновь вставленные строки.Каким-то образом курсор перезагружается, и одни и те же строки читаются дважды и т. Д.

Как заставить sqlite3_step читать только 3 строки?По сути, я хочу просмотреть только набор результатов, а не новые строки.

Спасибо.

Ответы [ 4 ]

1 голос
/ 01 ноября 2010

По сути, так я подхожу к этой проблеме.

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

Спасибо за вашу помощь.

1 голос
/ 29 октября 2010

Я думаю, что вы можете добиться желаемого поведения, запустив транзакцию для добавления строк перед циклом, который использует sqlite3_step для итерации по строкам, и подтвердите эту транзакцию после цикла.

1 голос
/ 29 октября 2010

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

sqlite3_last_insert_rowid(sqlite3*)

Если вы хотите отслеживать, какая строка вызвала вашу вставку - просто сохраните ее rowid при обработке.

Это даст вам действительное окно строк для обработки в

processThisRow = ( currentRowId > lastTriggered && currentRowId < firstInserted );

.. или вы можете использовать отдельную транзакцию, как предложено выше.

Надеюсь, это поможет

Rgrds Андерс

1 голос
/ 29 октября 2010

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

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