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 :

Problème accès base de données Access


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 40
    Par défaut Problème accès base de données Access
    Bonjour,

    Comme l'indique mon titre j'ai quelques problèmes lorsque j'attaque ma base de données sous Access 2010 :

    -Lorsque je tente d'insérer plusieurs enregistrements dans ma base, seul le premier s'ajoute à celle-ci.

    -Je ne peux supprimer ou modifier les informations de ma base (sauf en passant directement par access bien sûr) même si mes requêtes sont correctes

    (Vérifiées par copier/coller sous access après un System.out.println()).


    Precision importante !
    Un second projet, qui fonctionnait auparavant (sur une autre machine) me fait les mêmes problèmes, cela pourrait-il venir de ma configuration d'eclipse, access ou de ma DSN ?


    La methode de ma DAO Client servant à ajouter un client à la BDD :

    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
    	@Override
    	public boolean create(Client c) {
    		boolean ok = false;
    		String sqlAjout = "INSERT INTO Client (Nom_Cli ,Prenom_Cli ,Tel_Cli) VALUES ('"+ c.getNom() + "','" + c.getPrenom() + "','" + c.getTel() + "');";
    		try
    		{
    			this.connect.createStatement().executeUpdate(sqlAjout);
    			ok = true;
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		return ok;
    	}
    Exécution de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	public static void main(String[] args)
    	{
    		ClientDAO cDAO = new ClientDAO();
     
    		Client c1 = new Client(1,"Nom1", "Prenom1", "0123456789");
    		Client c2 = new Client(2,"Nom2", "Prenom2", "9876543210");
     
    		cDAO.create(c1);
    		cDAO.create(c2);
    	}
    }
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Client (Nom_Cli ,Prenom_Cli ,Tel_Cli) VALUES ('Nom1','Prenom1','0123456789');
    INSERT INTO Client (Nom_Cli ,Prenom_Cli ,Tel_Cli) VALUES ('Nom2','Prenom2','9876543210');
    J'ai testé ma connexion à la BDD et elle semble correcte.

    Pourriez-vous m'aider s'il vous plaît ? Cela fait quelques jours que je bloque dessus je commence à désespérer...

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Je suppose que ça retourne true et que tu n'a pas d'exception? La première chose que je remarque, c'est que tu ne fais pas de commit. Ce serait bien de commencer par faire un commit de ta transaction quand tu as fini. Je parie que tu t'es mis en autocommit et, comme tu quitte ton application sans même faire un close de la connection, aucune chance que les dernières instructions soient commit.


    Ton schéma d'attaque d'une base de donnée dois toujours suivre cet ordre, au minimum:


    • ouverture de connexion
    • début de la transaction
    • instructions sql
    • commit de la transaction (ou rollback)
    • fermeture de la connexion


    Il te manque au moins les deux dernier points, et je soupçonne qu'il te manque aussi le point numéro 2.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 40
    Par défaut
    Merci pour ta réponse, je débute en prog et j'aimerais savoir du coup en quoi consiste le début de la transaction et le commit s'il te plaît.
    Ensuite, pourquoi le fait de ne pas fermer la connexion empêcherait mes requêtes de s’exécuter correctement ?
    J'ai déjà mis les "commit" car on m'avait dit de le faire, ça n'a rien changé.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Un transaction, dans une base de données, c'est un ensemble d'opérations formant un tout. Tout passe ou rien ne passe. Le commit sert à valider la transaction. On informe le SGBD que le tout est terminé et qu'il peux définitivement stocker les changement. Le begin, de son coté, marque le début de la transaction. En jdbc, le begin est implicite (si je ne dit pas de bétise).

    Quand on ne précise rien, parfois, le sgbd considère que lors du close, on commit implicitement. Parfosi, au contraire, il considère que c'est un rollback implicite.

    Dans tous les cas, il n'y a rien de tout ça dans le code présenté.


    Dans ton cas:

    commencer par créer la connection
    appeler éventuellement connection.setAutoCommit(false);
    faire tes insert
    appeler connection.commit();
    appeler connection.close() pour bien libérer les ressources au niveau du sgbd.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 40
    Par défaut
    Merci pour ta réponse (et désolé pour le retard, les fêtes).

    Du coup problème toujours pas résolu.

    Pour suivre le bon schéma, mon code doit-il ressembler à ça :

    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
    	@Override
    	public boolean create(Client c) {
    		boolean ok = false;
    		String sqlAjout = "INSERT INTO Client (Nom_Cli ,Prenom_Cli ,Tel_Cli) VALUES ('"+ c.getNom() + "','" + c.getPrenom() + "','" + c.getTel() + "');";
    		try
    		{
    			this.connect.setAutoCommit(false);
    			this.connect.createStatement().executeUpdate(sqlAjout);
    			this.connect.commit();
    			this.connect.close();
    			System.out.println(sqlAjout);
    			ok = true;
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		return ok;
    	}
    Auquel cas voilà ce que ça me retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    INSERT INTO Client (Nom_Cli ,Prenom_Cli ,Tel_Cli) VALUES ('Nom1','Prenom1','0123456789');
    java.sql.SQLException: Connection is closed
    	at sun.jdbc.odbc.JdbcOdbcConnection.validateConnection(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcConnection.setAutoCommit(Unknown Source)
    	at com.persistance.ClientDAO.create(ClientDAO.java:19)
    	at com.vue.ProgPrin.main(ProgPrin.java:20)

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Plutot à ça:

    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
    @Override
    	public boolean create(Client c) {
    		boolean ok = false;
    		String sqlAjout = "INSERT INTO Client (Nom_Cli ,Prenom_Cli ,Tel_Cli) VALUES ('"+ c.getNom() + "','" + c.getPrenom() + "','" + c.getTel() + "');";
    		try
    		{
                            Connection connection = creerConnection();
    			connection.setAutoCommit(false);
    			connection.createStatement().executeUpdate(sqlAjout);
    			connection.commit();
    			connection.close();
    			System.out.println(sqlAjout);
    			ok = true;
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		return ok;
    	}

    Tant qu'on y est, je te conseille aussi d'utiliser des preparedStatement (voir la FAQ) plutot que concaténer comme ça des paramètres dans la requete.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme accés base de données internes Pocket
    Par hugobosscool26 dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 28/03/2008, 09h41
  2. Acces Base de donnée Access dans un combobox
    Par freko dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 25/10/2007, 12h10
  3. [MySQL] Problème accès base de données
    Par jokenjo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/12/2006, 09h33
  4. Accès Base de données Access
    Par vincent magnin dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/06/2006, 12h09
  5. Problème accès base de données
    Par alainconnu dans le forum Outils
    Réponses: 3
    Dernier message: 27/04/2006, 09h31

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