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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    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
    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
    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
    T'aurais pas oublié de faire un commit par hasard?

  3. #3
    Membre à l'essai
    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
    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
    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
    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
    Membre à l'essai
    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
    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
    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 peut voir le catch à la fin de ce try? Pourquoi tu ne l'a pas publié?

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