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 :

MySql J'obtiens les anciennes valeurs.


Sujet :

JDBC Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut MySql J'obtiens les anciennes valeurs.
    Bonjour,

    J'ai une table ( InnoDB) et deux applications :
    1) APP1 qui est une boucle en attente et qui se réveille toutes les heures pour lire des données de la table et prendre des décisions en fonction des modifications éventuelle des lignes de la table.
    2) APP2 qui gère la table (mises-à-jour, suppressions ou ajouts).

    SI je fais une modification dans la table avec APP2, les modifs ne sont pas prises en compte dans APP1 (j'obtiens les anciennes valeurs). Pourtant, je lance les commits après chaque modifs ou ajouts. Je suppose qu'il faut forcer un refresh des buffers (ou du cache) dans APP1 avant de lancer un "Select", mais je ne sais pas comment faire.

    Merci d'avance pour un conseil.

    Gégé

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Il faudrait savoir comment tu établis tes connexions mais je suppose que tu utilises le mode par défaut.
    Regarde du côté de "transaction isolation", par défaut tu es en "REPEATABLE READ"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    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
    Ton APP1 doit établir une nouvelle transaction à chaque fois qu'elle se réveille, sinon elle ne verra pas tout ce qui a été commit. D'une manière générale, une transaction doit garder un caractère de courte durée. Si APP1 a établis une connexion au début qu'elle continue d'utiliser et qu'elle ne fait pas de begin / commit, tu te retrouve avec une transaction qui dure des heures voir des semaines. En plus de ne pas voir le modifications récentes, cette transaction va bouffer inutilement de la place dans la mémoire de la DB.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    D'abord merci pour vos réponses. Comme je n'ai jamais travaillé en mode transaction, j'ai lu plus ou moins attentivement la documentation à ce sujet.
    J'ai commencé par faire ceci :
    Dans une session DOS j'ai tapé :

    mysql -u root .....
    USE myBAse;
    SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;



    Je n'ai rien changé dans mes programmes, toutefois après tous SELECT, INSERT, UPDATE ou DELETE, je lance un con.commit() (je ne suis pas sûr qu'il en faille un après les SELECT);
    C'est peut-être cela le problème. Que faut-il ajouter dans mon code pour qu'à chaque nouveau select il y a un rechargement forcé des buffers.
    Y-a-t-il une commande de début de transaction et de fin de transaction que je doive ajouter (même en mode lecture ?)
    Merci si vous avez des exemples.

    Pour ce qui est de conserver les données pour le programme en boucle, après chaque select je lance :

    rs.close();
    stmt.close();
    cnx.close();


    N'est-ce pas suffisant pour libérer les ressources ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    J'ai refait des essais. Je n'avais pas trouvé la possibilité de lancer un begin alors j'ai fait comme suit :

    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
     
     java.sql.Connection cnx = java.sql.DriverManager.getConnection(url,"gege","" );
     cnx.setAutoCommit(false);
     cnx.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITTED);
    ...
     
     java.sql.Statement stmt  = 	cnx.createStatement();
     if (stmt==null) return ;
     String requete = "Select * FROM Personnes ORDER By Anniv" ;
     java.sql.ResultSet rs =  stmt.executeQuery(requete);
    .....
     
    cnx.commit( );
    rs.close();
    stmt.close();
    cnx.close();
    Mais la seconde fois que je relance ce code, je récupère encore les anciennes valeurs.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    En fermant systématiquement les connexions après les demandes à ma table (les problèmes de performance n'existent pas) , tout fonctionne parfaitement.

    Merci encore

    Gégé

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

Discussions similaires

  1. formulaire garde les anciennes valeurs
    Par psycho_xn dans le forum JSF
    Réponses: 11
    Dernier message: 15/09/2008, 18h32
  2. Réponses: 1
    Dernier message: 08/06/2007, 09h12
  3. Historiser des modifications et les anciennes valeurs
    Par el_quincho dans le forum Access
    Réponses: 4
    Dernier message: 29/05/2006, 16h49

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