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 :

[Update] Blocage sur Statement.executeUpdate


Sujet :

JDBC Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Points : 223
    Points
    223
    Par défaut [Update] Blocage sur Statement.executeUpdate
    Bonjour,

    J'ai un soucis d'éxecution d'une requète d'update en Java sur une base Oracle, en effet la requète suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE REPT rep 
    SET rep.PURGEABLE = 'O' 
    WHERE rep.REP IN (SELECT f.REP 
                  FROM FGT f
                  WHERE f.FGT_VALD_DT < to_date('01/01/2006', 'dd/MM/YYYY') )
    s'éxecute parfaitement sous toad avec un temps d'éxecution rapide, mais lorsque je l'a fait éxecuter en Java, mon appli se bloque sur le executeUpdate. Il ne sort ni dans une exception, et ne se termine jamais, je n'ai donc aucun code d'erreur qui pourrais m'être utile.

    Voyez vous l'origine du problème ?
    La posix attitude ...

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    tu peux nous montrer le bout de code correspondant ?
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Points : 223
    Points
    223
    Par défaut
    Voici le morceaux de code qui effectue le executeUpdate
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    protected void executeUpdate(String querry)throws FmkStoreException ,FmkSystemException{
     
    	Statement stmt =null;
    	FmkConnectionInterface conn = null;
     
    	try {
    		// on recupere la connexion qui existe peut etre deja	
    		conn = ConnectionManager.getFmkConnection(getDataBaseName()); 
     		stmt = conn.createStatement(); 
     
    		// on lance la requete
    		int res = stmt.executeUpdate(querry.toString()); 
     
    		if (conn.getCommitMode() == conn.MODE_CONNECTION_AUTO)
    			conn.commit();
     
    		if (res == 0)
    			throw new FmkStoreException("EJB-4101",querry+" : Execute Update returned 0");
     
    	} catch (SQLException exception) {
    		String errorMessage = "";
    		while (exception != null) {
    			errorMessage += "\nERROR:\n";
    			errorMessage += "Message: "+ exception.getMessage ();
    			errorMessage += "SQLState: "+ exception.getSQLState ();
    			errorMessage += "ErrorCode: "+ exception.getErrorCode ();
    			exception = exception.getNextException();
    		}			
    		throw new FmkStoreException("EJB-4202",querry+" : "+errorMessage);
    	}finally{
    		// fermeture du statement
    		try{
    			stmt.close();
    		}catch(Exception sqle){}
     
    		if (conn.getCommitMode() == conn.MODE_CONNECTION_AUTO){	
    			try{
    				conn.close();
    			}catch(Exception sqle){}
    		}
    	}
    }
    La posix attitude ...

  4. #4
    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
    Plusieurs questions :
    - es-tu sûr d'avoir le driver jdbc d'oracle qui va bien ?
    - ton ConnectionManager renvoit-il une connection avec un niveau d'isolation (avec transaction) ?
    - dans ton process, existe-t-il une possibilité pour qu'un enregistrement soit verrouillé ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Points : 223
    Points
    223
    Par défaut
    Alors cette requète est un bout d'une évolution d'une grosse application donc niveau driver etc tout est bien présent et non mes enregistrements ne sont pas vérouillés, enfin je ne pense pas je n'ai rien mis en place dans ce sens.
    Sinon comment le vérifier ?

    J'ai identifié que c'est la partie IN(SELECT ...) qui pose un soucis, il n'a pas l'air d'aimer cette forme de requète.
    La posix attitude ...

  6. #6
    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
    peux-tu essayer de mettre une date directement à la place de to_date(...) ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Points : 223
    Points
    223
    Par défaut
    Cela ne change rien. J'avais également testé avec autre chose qu'une date dans la sous requète afin d'éliminer un soucis au niveau des dates et c'est la même chose ...

    Edit : enfin ca marche pas du tout sans le to_date().
    La posix attitude ...

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Points : 223
    Points
    223
    Par défaut
    Help help personne ne voit ???

    Ca m'embeterai quand même de devoir sortir tt mes elements de la base de donner les analyser en java et devoir tous les reinserer un par un car c'est couteux en temps ...
    La posix attitude ...

  9. #9
    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
    Difficile de t'aider avec les infos dont on dispose...

    Regarde si le serveur Oracle a tracé une log, on ne sait jamais...
    Quelle est la version d'Oracle, quelle est la version du driver JDBC, quelle est la définition de la source de données... euh... pour l'instant ça ira...

    En ce qui me concerne, il n'y a aucune raison pour que cette requête ne fonctionne pas... (à part un verrouillage, bien sûr)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. blocage sur une méthode synchronized
    Par rockelite dans le forum Général Java
    Réponses: 3
    Dernier message: 03/05/2006, 22h28
  2. Blocage sur récursivité de base
    Par gilles641 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 07/04/2006, 13h42
  3. blocage sur Left
    Par TSS dans le forum Access
    Réponses: 5
    Dernier message: 10/03/2006, 12h33
  4. [10g1][OCI][C++][IIS] Blocage sur un update
    Par Herode dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 21/02/2006, 09h32
  5. Réponses: 2
    Dernier message: 29/09/2004, 09h07

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