2009-11-12 3 views
7

Je courais un END TRANSACTION sur ma base de données et de temps en temps, je reçois une erreurDéterminer si la transaction SQLite3 est actif

# 1 que « ne peut pas commettre - aucune transaction active »

est-il un moyen déterminer si une transaction est active avant d'essayer une validation? J'ai suivi mon "BEGIN TRANSACTIONS" à la main mais je pense qu'il y a un meilleur moyen.

J'utilise l'API C

Répondre

0

Dans SQLite, les transactions créées à l'aide BEGIN TRANSACTION ... END TRANSACTION ne niche.

Pour les transactions imbriquées, vous devez utiliser les commandes SAVEPOINT et RELEASE.

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

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

+0

Vous répondez quelque chose à propos d'imbrication qui a Rien à voir avec la question. –

+1

Oh, je suis désolé, j'ai mal compris. Je pensais que vous aviez dû tenir compte du degré d'imbrication des transactions, ce qui pourrait s'avérer désynchronisé avec SQLite s'il ne le supportait pas. Pour autant que je sache, il n'y a aucun moyen de demander à SQLite s'il est dans une transaction. –

0

C'est bizarre. Je pensais que sqlite était toujours dans une transaction, soit explicitement créé par vous ou implicitement créé par sqlite:

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

Je suppose que l'erreur signifie que ce n'est pas dans une transaction que vous avez lancé ... et si cela est ce que vous devez savoir, il semble correct pour sqlite de s'attendre à ce que vous restiez au courant. Pas très pratique bien sûr, mais je suppose que c'est le coût d'une API simple. =/

Questions connexes