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 :

"INSERT INTO" Problème de mise à jour de base de donnée


Sujet :

JDBC Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut "INSERT INTO" Problème de mise à jour de base de donnée
    Bonjour,

    Je travaille en JAVA avec une base de donnée embarquée HSQSDB.

    J'essaye de modifier une table "vehicule" de la base de donnée avec les instructions ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    PreparedStatement prepare = connect.prepareStatement("INSERT INTO vehicule (marque, moteur, prix, nom) VALUES(?, ?, ?, ?)");
     
    prepare.setInt(1,0);
    prepare.setInt(2,3);
    prepare.setDouble(3, 10000);
    prepare.setString(4,"newCar");
    prepare.executeUpdate();
    Le fichier "VEHICULE.properties " de la base de donnée indique que des modifications ont été réalisées.
    La fonction s'exécute, les modifications sont effectives tant que le programme n'a pas fini de tourner mais la base de donnée n'est pas mis à jour.
    Les changements ne sont pas enregistrés.

    Merci pour vos conseils!

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    T'aurais pas oublié de faire un commit par hasard?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse!
    A ma connaissance l'option par défaut de la connexion est setAutoCommit(true).
    Par acquis de conscience j'ai fini le code par connect.commit(); mais sans amélioration malheureusement...

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    D'accord, tu peux me montre le code depuis la création de la connexion, l'insertion des données, le commit et montrer comment tu teste que les données sont présentes en base?
    Tu es sur que ce n'est pas ton application qui nettoie la base au démarrage?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci Tchize_ de t'intéresser à cette question.
    Je vais essayer de te fournir le maximum.

    La classe de création de la connexion
    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
     
    public class HsqldbConnection {
    	// URL de connexion
    	private String url = "jdbc:hsqldb:file:hsqldb/database/VEHICULE";
    	// Nom du user
    	private String user = "SA";
    	// Mot de passe de l'utilisateur
    	private String passwd = "";
    	// Objet Connection
    	private static Connection connect;
    	private static HsqldbConnection instance = new HsqldbConnection();
     
    	// Constructeur privé
    	private HsqldbConnection() {
    		try {
    			connect = DriverManager.getConnection(url, user, passwd);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
     
    	// Méthode d'accès au singleton
    	public static Connection getInstance() {
    		if (connect == null)
    			instance = new HsqldbConnection();
     
    		return connect;
    	}
    }
    La classe de test qui appelle ma fonction de création des données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class SecondTest {
    	  public static void main(String[] args) {
    		  Vehicule vehicule = new Vehicule();
    		  DAO<Vehicule> vehiculeDao = new VehiculeDAO(HsqldbConnection.getInstance());
    		  vehiculeDao.create(vehicule);
     
     
    	}
    }
    La fonction create de la classe VehiculeDao qui est censée permettre la mise à jour de la base de donnée.

    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
     
    public void create(Vehicule obj) {
    	try{
    		connect.setAutoCommit(true);
    		Statement state = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    		PreparedStatement prepare = connect.prepareStatement("INSERT INTO vehicule (marque, moteur, prix, nom) VALUES(?, ?, ?, ?)");
     
    		prepare.setInt(1,0);
    		prepare.setInt(2,3);
    		prepare.setDouble(3, 10000);
    		prepare.setString(4,"newCar");
    		int nbMaj = prepare.executeUpdate();
    		System.out.println("nb de mises à jour: " + nbMaj);
     
    		String query = "Select * FROM vehicule WHERE id  = 19";
     
    		ResultSet res = state.executeQuery(query);
    		res.first();
     
    		System.out.println(res.getString("nom")+ " - " + res.getInt("marque") + " - " + res.getInt("moteur")+ " - " + res.getDouble("prix") + " - " + res.getInt("id"));
     
    		connect.commit();
    		prepare.close();
    		res.close();
    		state.close();
    Les résultats du print:

    nb de mises à jour: 1
    newCar - 0 - 3 - 10000.0 - 19


    La modification des données est effective tant que l'on se sort pas de l'exécution de la fonction.
    Une fois sorti de l'exécution de la fonction (et avant même la fin du programme) les changements n'apparaissent plus.

    Merci si tu as une piste.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je peut voir le catch à la fin de ce try? Pourquoi tu ne l'a pas publié?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Voilà la fonction create avec le catch

    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
     
    public void create(Vehicule obj) {
    	try{
    		connect.setAutoCommit(true);
    		Statement state = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    		PreparedStatement prepare = connect.prepareStatement("INSERT INTO vehicule (marque, moteur, prix, nom) VALUES(?, ?, ?, ?)");
     
    		prepare.setInt(1,0);
    		prepare.setInt(2,3);
    		prepare.setDouble(3, 10000);
    		prepare.setString(4,"newCar");
    		int nbMaj = prepare.executeUpdate();
    		System.out.println("nb de mises à jour: " + nbMaj);
    		prepare.executeUpdate();
     
    		String query = "Select * FROM vehicule WHERE id  = 19";
     
    		ResultSet res = state.executeQuery(query);
    		res.first();
     
    		System.out.println(res.getString("nom")+ " - " + res.getInt("marque") + " - " + res.getInt("moteur")+ " - " + res.getDouble("prix") + " - " + res.getInt("id"));
     
    		connect.commit();
    		prepare.close();
    		res.close();
    		state.close();
     
    	  } catch (SQLException e) {
    		    e.printStackTrace();
    	  }	
    }

  8. #8
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Il sort d'où cet ID 19?

    Sinon, je ne vois pas pourquoi ta base ne voudrait pas enregistrer tes données (sauf configuration qui ferait qu'elle n'enregistre rien)
    Je ne suis pas mort, j'ai du travail !

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci eulbobo pour ta réponse!
    l'ID de la table véhicule est lié à une séquence qui s'incrémente toute seule.
    Il n'est donc pas nécessaire de le renseigner lors de l'insertion dans la table.
    l'ID 19 est le prochain numéro créé (le précédent était 18).
    Il y a peut-être quelque chose de l'ordre de la configuration de la base de données en effet...

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ok, tu peux nous ajouter une methode dans ton code qui liste le contenu de la table et nous le donner? J'ai l'impression que les données sont là mais tu ne les récupère pas correctement.

    Sinon, tu peux exécuter au début de ton application "SET DATABASE EVENT LOG LEVEL" pour en savoir plus et penser à exécuter un SHUTDOWN quand tu quitte ton programme.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    J'ai vérifié les données présentes sur la table par plusieurs méthodes qui je pense fonctionnent bien.
    Le nouvel ID créé lors de l'écriture est toujours le même numéro 19 donc cela corrobore le fait que l'insertion n'est finalement pas inscrite en base.
    Le SHUTDOWN que j'avais déjà essayé n'a pas donné d'amélioration.
    Je suis conscient qu'avec des éléments de codes parcellaires comme ceux que je t'ai fourni, cela est difficile de trouver une solution...
    En tout cas, merci pour ton aide tchize_!

Discussions similaires

  1. [MySQL] Mise à jour de base de données et d'insertion
    Par benjamin_malaussene dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/04/2015, 11h53
  2. [Cours pt-05]Moteur de mise à jour de base de données
    Par Papy Turbo dans le forum Sondages et Débats
    Réponses: 38
    Dernier message: 29/10/2007, 19h02
  3. [MySQL] Mise à jour dynamique base de données
    Par Lili72430 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/09/2007, 12h36
  4. Requête de mise à jour - Ouverture base de données
    Par ade94 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 31/05/2007, 16h50
  5. Problème de mise à jour de base de données
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 26/05/2004, 11h38

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