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 :

Annuler une requête


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 94
    Par défaut Annuler une requête
    Bonjour à tous,

    je suis actuellement occupé à écrire un programme devant effectuer des requêtes SQL dans une db Oracle.

    J'aimerai pouvoir, via une interface graphique, annuler une requête lorsque celle-ci prend trop de temps. Pour celà, la requête s'effectue dans un thread et un bouton d'annulation a été prévu avec le code suivant pour annuler la requête :

    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
     
    try 
    {
    	if(statement!= null)
    	{
    		statement.cancel();
    		statement.close();
    	}
     
    	threadRecherche.stop();
     
    } 
    catch (SQLException e) 
    {
            System.out.println("SQLException "+e.getMessage());
    }
    catch(Exception e)
    {
            System.out.println("Exception "+e.getMessage());
    }
    Mon problème est que l'annulation bloque au niveau de la méthode statement.close(). Aucune erreur n'est généré, le programme se bloque sans raison apparente, figeant ainsi l'interface graphique.

    Est-ce que mon principe pour annuler une requête en cours est correct? Pourquoi l'instruction close est-elle bloquante?

    Je vous remercie d'avance

  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
    les classes de jdbc ne sont pas threadsafe. Tu ne peux donc pas avoir en même temps deux thread qui appellent deux méthodes différentes (ici execute et close) de statement en même temps. D'ou ton problème normalement tu fais juste le cancel et, si le driver jdbc le supporte, la méthode execute() qui était en cours d'exécution va s'arrêter et lancer une exception. C'est donc au thread qui a lancé cette méthode execute de faire l'appel à close, de faire un rollback de la transaction, etc. La seul appel supporté depuis un autre thread, c'est cancel()

Discussions similaires

  1. Annuler une requête SQL
    Par Benamour Jr dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/08/2010, 10h42
  2. Annuler une requête powerplay dans cognos 8.4
    Par fevene007 dans le forum Cognos
    Réponses: 0
    Dernier message: 04/08/2009, 01h20
  3. Trigger qui annule une requête UPDATE
    Par sat83 dans le forum Débuter
    Réponses: 3
    Dernier message: 30/01/2009, 10h32
  4. Comment annuler une requête
    Par pierrot67 dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/02/2007, 10h10
  5. [AJAX] Annuler une requête asynchrone server side
    Par Matthieu Bissat dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/01/2007, 20h42

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