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