IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Database locked - SQLite


Sujet :

JDBC Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 15
    Par défaut Database locked - SQLite
    Bonsoir à tous,

    Voilà mon problème :

    J'utilise une base de données SqLite et régulièrement j'obtiens cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    java.sql.SQLException: database locked
    	at org.sqlite.DB.execute(DB.java:270)
    	at org.sqlite.DB.executeUpdate(DB.java:281)
    	at org.sqlite.Stmt.executeUpdate(Stmt.java:103)
    	at traitement.local.Produit_local.modifier(Produit_local.java:133)
    	at vue.FenetreModifProduit$1.actionPerformed(FenetreModifProduit.java:542)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    Quand je relance Eclipse après ça marche nickel. Auriez-vous une piste de solution ?

    Merci d'avance pour vos réponses.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut
    Bonjour,

    J'ai presque le même genre de problème que toi :
    - J'utilise une base de données Sqlite que je combine avec le langage Java (sous Eclipse).
    - Lorsque je souhaite faire un update, create, ... j'obtiens la même erreur que toi ("java.sql.SQLException: database locked etc. etc."). En revanche, lorsque je relance Eclipse, ca ne marche toujours pas. De plus, toutes requêtes Select fonctionnent très bien.

    As-tu trouvé une solution à ton problème? Si oui, pourrais-tu me dire comment as-tu résolu le problème stp.

    Merci d'avance

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Sur ce que j'ai pu lire cela pourrais être lié à l'ouverture de plusieurs connexions ! Est ce votre cas ?

    Etes vous obligé d'utiliser SQLite ? car je conseil plutôt une base comme H2 pour faire de l'embarqué car elle est full java et elle est très performante.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut
    Ca y est mon problème est résolu

    En effet, il s'agissait bien de plusieurs connexions... J'avais fait des tests pour voir si celles-ci s'ouvraient et se fermaient bien après chaque requêtes et c'était le cas.
    Par contre, j'utilisais des méthodes statiques donc les objets (connection, statement, ...) étaient tout le temps les mêmes. Du coup, la connexion n'était jamais nettoyée proprement.
    Voici le code (et un exemple de son fonctionnement juste après) pour ceux que ca intéresseraient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     import java.sql.*;
     
     public class Sqlite {
    	 private Connection con;
    	 private Statement st;
    	 private String databaseFile;
     
    	 /** Constructeur de SQLite */
    	 public Sqlite() {
    	 }
     
    	 public void connect(){
    		 // Connexion à la base de donnnées.
    		try {
    			Class.forName("org.sqlite.JDBC");
    			databaseFile = "myDataBase.db";
    	        con = DriverManager.getConnection("jdbc:sqlite:" + databaseFile);
    		}catch(Exception e){
    			System.out.println("Problème connexion : "+e);
    		 }
    	 }
     
    	 public void disconnect(){
    		 try {
    			 st.close();
    			 con.close();
    		 } catch(Exception e){
    			 System.out.println("Problème déconnexion : "+e);
    		 }
    	 }
     
    	 public ResultSet executeQuery(String query) throws SQLException{
    		 st = con.createStatement();
    		 return st.executeQuery(query);
    	 }
     
    	 public void executeMyUpdate(String query) throws SQLException{
    		 st = con.createStatement();
    		 st.executeUpdate(query);       
     
    	 }
    Puis, je fais ceci à chaque requête dont j'ai besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		Sqlite maBase = new Sqlite();
    		maBase.connect();
     
    		maBase.executeMyUpdate(maRequete);
     
     
    		maBase.disconnect();
    Voila, merci pour l'info !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    bonjour,
    Etes vous obligé d'utiliser SQLite ? car je conseil plutôt une base comme H2 pour faire de l'embarqué car elle est full java et elle est très performante.
    Pour ma part, je ne suis pas obligée d'utiliser SQLite mais j'ai un projet à faire en 4 mois et presque 2 sont terminés.. Je ne peux donc pas revenir en arrière. SQLite me va très bien (mise à part ce petit souci que j'ai eu, du à une erreur de ma part) mais je garde H2 en tête si jamais un autre projet du même genre se représente Merci pour l'info !

  6. #6
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par JulieD Voir le message
    Pour ma part, je ne suis pas obligée d'utiliser SQLite mais j'ai un projet à faire en 4 mois et presque 2 sont terminés.. Je ne peux donc pas revenir en arrière.
    Normalement, avec jdbc il n'y a pas de changement à faire. Les modifications qu'il pourrait y avoir a faire sont uniquement lié à la création des tables car les types de donnée varie d'une base à l'autre.

    D'autre part, je ne sais pas si tu as beaucoup d'accès à la base ? Même si c'est une base embarqué, il est très moyen de créer une connexion à chaque requête !

    De plus, ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      Sqlite maBase = new Sqlite();
      maBase.connect();
     
      maBase.executeMyUpdate(maRequete);
     
     
      maBase.disconnect();
    en cas d'erreur de ta requête, il est certain que la base ne sera pas déconnecté.

    En général, on ouvre une connexion que l'on garde toute la session.
    Je te conseil aussi d'utiliser les PreparedStatement plutôt que les Statement
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut
    Ok merci pour les infos, je vais faire les changements nécessaires

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/02/2015, 16h33
  2. Problème avec SQLite : Database locked
    Par albert55 dans le forum Persistance des données
    Réponses: 0
    Dernier message: 19/04/2013, 16h10
  3. [Généralités] WINDEV + SQLITE database is locked
    Par sperchey dans le forum WinDev
    Réponses: 2
    Dernier message: 15/01/2013, 21h00
  4. DataBases Android SQLite
    Par salima198710 dans le forum Android
    Réponses: 10
    Dernier message: 02/12/2011, 22h37
  5. Exceptions, sqlite database locked
    Par r470n dans le forum Général Python
    Réponses: 4
    Dernier message: 01/09/2009, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo