Определите, активна ли транзакция SQLite3 - PullRequest
7 голосов
/ 12 ноября 2009

Я использую END TRANSACTION в своей базе данных, и иногда я получаю сообщение об ошибке

# 1, который «не может зафиксировать - ни одна транзакция не активна»

Есть ли способ определить, активна ли транзакция перед попыткой фиксации? Я отслеживал свои "BEGIN TRANSACTIONS" вручную, но чувствую, что есть лучший способ.

Я использую C API

Ответы [ 3 ]

13 голосов
/ 08 февраля 2010

Вы можете проверить это:

http://www.sqlite.org/c3ref/get_autocommit.html

Согласно странице, если вы находитесь в транзакции, sqlite3_get_autocommit() вернет 0.

0 голосов
/ 05 февраля 2010

Странно. Я думал, что sqlite всегда был в транзакции, явно созданной вами или неявно созданной sqlite:

http://www.sqlite.org/lang_transaction.html

Итак, я полагаю, что ошибка означает, что вы не инициировали транзакцию ... и если это то, что вам нужно знать, то для sqlite вполне нормально ожидать, что вы справитесь с ней. Конечно, не очень удобно, но я думаю, это стоимость простого API. = /

0 голосов
/ 12 ноября 2009

В SQLite транзакции, созданные с помощью BEGIN TRANSACTION ... END TRANSACTION, не вложены.

Для вложенных транзакций вам необходимо использовать команды SAVEPOINT и RELEASE.

См. http://www.sqlite.org/lang_transaction.html

и http://www.sqlite.org/lang_savepoint.html

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