2010-04-05 3 views
9

Nous utilisons sqlite056.jar dans notre code. Lors de l'insertion dans la base de données en batch, nous recevons une exception en ligne lorsque nous allons commettre.java.sql.SQLException: base de données verrouillée

lignes de code

<object of Connection>.commit(); 
<object of Connection>.setAutoCommit(true); 

Exception

java.sql.SQLException: database locked 

Répondre

2

Il semble que plus d'un processus tente de modifier la base de données. Vous ne pouvez avoir qu'une seule connexion ouverte à un moment donné. Plus de fond sur le problème peut nous aider à vous fournir une réponse plus concrète.

+0

pouvons-nous travailler avec plusieurs tables de base de données en même temps avec la même objet de connexion de base de données suppose que j'ai valeur insérée dans le tableau 1 et en même temps valeur également inséré dans le tableau 2 de la base de données avec un même objet de données connexion de base. – rajkumari

+0

ou une exception de blocage de base de données s'est produite en raison de l'obj Connection.commit() – rajkumari

7

La lecture d'une base de données SQLite définit l'état de verrouillage sur Partagé. Plusieurs lecteurs peuvent être actifs en même temps.

L'écriture dans une base de données SQLite définit l'état de verrouillage sur Exclusif. Aucun autre processus ne peut être actif à ce moment-là.

Vous trouverez une explication détaillée sur http://www.sqlite.org/lockingv3.html

+0

J'ai eu la même erreur lors de l'exécution d'une applet (qui a accédé à un sqlite db) avec appletviewer. Mais seulement en courant sous un JVM 64bit. Passer à un jvm 32bit a bien fonctionné (windows). Probablement le pilote 64 bits n'a pas été compilé dans le pot. – dgorissen

9

connexion doit être fermée après chaque requête. Si l'une des connexions persiste toujours. J'avais la même erreur sur les applications de bureau Java, maintenant résolues.

0

Dans mon cas, j'ai oublié d'ajouter la clause WHERE dans ma requête UPDATE et cela donne l'erreur "database locked".

Vérifiez soigneusement vos requêtes.

Edit: oublié d'indiquer que j'ai utilisé un type de requête UPDATE où je change plusieurs attributs:

utilisateur UPDATE Set Poids = 160, desiredWeight = 145 WHERE id = 1;

+1

** Une très vieille question ** - mais merci d'essayer d'y répondre. Dans ce cas précis, vous n'aviez aucune idée de ce à quoi ressemblait l'instruction 'SQL' en question - suggérant ainsi que la requête était' UPDATE' avec un 'WHERE 'manquant en tant que deviner-work. Ce qui aurait été plus approprié dans ce cas était de demander (dans un commentaire) à quoi ressemblait la requête SQL - suggérant que la cause pourrait ressembler à une clause WHERE manquante. – ishmaelMakitla

+0

J'ai ajouté modifier à mon message. Je pense que peu importe combien de temps la question est, les gens googles pour ce problème, comme moi. Salutations! –

+0

Bon point. En ce qui concerne l'instruction SQL, je voulais dire que la question elle-même n'incluait pas l'instruction SQL, donc vous n'auriez pas su (sans le demander) à quoi cela ressemblait. Mais bon point de répondre aux vieilles questions - bon point. – ishmaelMakitla

Questions connexes