Problème base de données

fredou30 Messages postés 46 Date d'inscription vendredi 30 septembre 2005 Statut Membre Dernière intervention 2 juin 2014 - 22 janv. 2007 à 16:42
fredou30 Messages postés 46 Date d'inscription vendredi 30 septembre 2005 Statut Membre Dernière intervention 2 juin 2014 - 15 févr. 2007 à 23:06
Bonjour,
j'ai conçu un programme qui permet de gérer des clients grâce à une base de données. Mais il arrive que je perd des séries de clients rentré et je ne comprend pas pourquoi.

Voici le code utilisé pour le chargement des clients en mémoire:

static public void load(){
  int compteur = 0;
  String url = "jdbc:odbc:gestion";
  try{
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   
   //Variable de connexion
   Connection con = null;
   //Connexion
    con = DriverManager.getConnection(url,"","");
   
    //Création de la requête
    Statement requete = con.createStatement();
   
    //Sélection des résultats
    ResultSet resultat = requete.executeQuery("SELECT * FROM clients"); 
 
       //Enregistrement dans la classe Gestion
         while (resultat.next()) {
             Gestion.tabNom[compteur] = resultat.getString(2);
             Gestion.tabAdresse[compteur] = resultat.getString(3);
             Gestion.tabTelBur[compteur] = resultat.getString(4);
             Gestion.tabTelMaison[compteur] = resultat.getString(5);
             Gestion.tabTelCell[compteur] = resultat.getString(6);
             Gestion.tabDateDernierRV[compteur] = resultat.getString(7);
             Gestion.tabNumDossier[compteur] = resultat.getString(8);
             Gestion.tabSexe[compteur] = resultat.getString(9);
             Gestion.tabDateNaissance[compteur] = resultat.getString(10);
             Gestion.tabVille[compteur] = resultat.getString(11);
             Gestion.tabCodePostal[compteur] = resultat.getString(12);
             Gestion.tabProvince[compteur] = resultat.getString(13);
             Gestion.tabParent[compteur] = resultat.getString(14);
              
               compteur++;
             }   
        
         con.close();
  }catch(SQLException e){
   //Erreur de commande
   e.printStackTrace();
  }
  catch(ClassNotFoundException e){
   //Erreur lors du chargement du driver
   e.printStackTrace();
  }
 }




Voici le code utilisé pour enregistré les clients dans la base:

static public void write(int indiceWrite){
  String url = "jdbc:odbc:gestion";
  try{
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  }
  catch(ClassNotFoundException e){
   //Si erreur lors du chargement du driver
     e.printStackTrace();
  }
  try{
  Connection con = null;
  //Connexion
   con = DriverManager.getConnection(url,"","");
   //Création de la requête
   Statement requete = con.createStatement();
  
   //Ajout du nouveau client dans la table clients
//On ajoute chaque champs saisie dans la classe Gestion
    requete.executeUpdate("INSERT INTO clients (nom,adresse,telBur,telMaison,telCell,dateDernierRV,numDossier,sexe,dateNaissance,ville,codePostal,province,parent) VALUES ('" + Gestion.tabNom[indiceWrite] + "','" + Gestion.tabAdresse[indiceWrite] +
          "','" + Gestion.tabTelBur[indiceWrite] + "','" + Gestion.tabTelMaison[indiceWrite] + "','" + Gestion.tabTelCell[indiceWrite] + "','" + Gestion.tabDateDernierRV[indiceWrite] + "','" + Gestion.tabNumDossier[indiceWrite] + "','" + Gestion.tabSexe[indiceWrite] +
          "','" + Gestion.tabDateNaissance[indiceWrite] + "','" + Gestion.tabVille[indiceWrite] + "','" + Gestion.tabCodePostal[indiceWrite] + "','" + Gestion.tabProvince[indiceWrite] + "','" + Gestion.tabParent[indiceWrite] + "')");





       //Fermeture de la connexion
         con.close();
  
  }
  catch(SQLException e){
   //Erreur de commande
   e.printStackTrace();
  }
 }

Merci de m'aider

6 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
22 janv. 2007 à 21:04
Salut:



Petite remarque conceptuelle:



-> Tu dois appeler ce code une seule fois.



Donc tu dois le faire dans un bloc static ou au début du main.






 try{
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  }
  catch(ClassNotFoundException e){
   //Si erreur lors du chargement du driver
     e.printStackTrace();
  }





__________________________________________________________
A.B. :  Je vais apprendre et apprendre et apprendre ....
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
23 janv. 2007 à 18:50
Ca serait pas un problème de commit?

essaye dans ta classe write :

Connection con = null;
  //Connexion
   con = DriverManager.getConnection(url,"","");
   //Création de la requête
      con.setAutoCommit(true);

ou

con.commit();
//Fermeture de la connexion
con.close();

avant de fermer ta connection.




JB...
0
fredou30 Messages postés 46 Date d'inscription vendredi 30 septembre 2005 Statut Membre Dernière intervention 2 juin 2014
23 janv. 2007 à 19:00
À quoi sa sert le commit ???
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
23 janv. 2007 à 19:04
A valider/confirmer tes requetes du genre insert/update/delete.
Tant qu'elles ne sont pas "commitées" les transactions (requetes) ne sont pas enregistrées physiquement dans la base

JB...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
helia_5006 Messages postés 8 Date d'inscription mardi 31 janvier 2006 Statut Membre Dernière intervention 6 février 2007
3 févr. 2007 à 13:39
Bonjour,
J'ai exactement le même problème que fredou30.
J'ai donc placé setAutoCommit(true) juste après la connection à la base MySQL. Mais lorsque j'exécute une requête INSERT ou UPDATE, que j'appelle ensuite commit(), JDBC me renvoit une exception me disant que je ne dois pas appeler commi() si AutoCommit est à TRUE.

Ce faisant, j'ai regardé la doc. J' ai passé FALSE à setAutoCommit() à false ; après chaque requête, j'appelle commit(), mais non, rien à faire, les données ne sont pas enregistrées physiquement dans ma base.

De l'aide svp.... merci
0
fredou30 Messages postés 46 Date d'inscription vendredi 30 septembre 2005 Statut Membre Dernière intervention 2 juin 2014
15 févr. 2007 à 23:06
Salut je crois que sa ne te sert à rien de faire commit( ) apres chaque requete.
En fesant setAutoCommit( ) il devrait le faire automatiquement, donc pas besoin de la rappeler.

Je crois qu'il est préférable d'utiliser setAutoCommit( ) au lieu de faire commit( ) apres chaque requetes.
0
Rejoignez-nous