Plusieurs requete sur le meme statement

Résolu
NewJavaLearner
Messages postés
36
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
28 avril 2012
- 17 avril 2008 à 09:00
 abdelatif - 27 nov. 2014 à 11:38
Apprendre c'est vivre.
A voir également:

9 réponses

Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
38
17 avril 2008 à 09:34
Salut:

Je ne vois pas où réside le problème.

La classe Statement permet d'exécuter des requêtes SQL et de retourner des résultats.

Connection connection = ...;

Statement statement = connection.createStatement();

ResultSet cltResultSet = statement.executeQuery("SELECT * FROM T_CLIENT");
// Traiter cltResultSet
while (cltResultSet.next()) {
    // ...
}

// Utiliser ce même objet statement pour lancer une autre requête
ResultSet cmdResultSet = statement.executeQuery("SELECT * FROM T_COMMANDE");

// Traiter cmdResultSet

while (cmdResultSet.next()) {

    // ...

}

Tu vois, le problème ne se pose pas, parceque un objet de type Statement n'est pas fait pour exécuter une seule requête.
3
SALAM ....merci beaucoup
0
NewJavaLearner
Messages postés
36
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
28 avril 2012

17 avril 2008 à 09:49
Merci énormement
Apprendre c'est vivre.
0
cs_Chatbour
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
17 avril 2008 à 11:40
Salut à tous

Ombitious_Developper -> qu'est-ce qui se passe lorsqu'on ne fait pas

cmdResultSet.close() ? également


connection.close() ?
0
Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
38
17 avril 2008 à 12:18
Salut:

Chatbour >> SQLException.

C'est vrai, que je n'ai pas fait tous les tests nécessaires. Mais pour faire les choses dans les régles de l'art, il faut utiliser les méthodes close() et isClosed().

En effet, les classes ResultSet, Statement, et Connection exposent des telles méthodes.

Connection connection = ...;

Statement statement = connection.createStatement();

ResultSet cltResultSet = statement.executeQuery("SELECT * FROM T_CLIENT");
while (cltResultSet.next()) {
    // ...
}
// Faire le ménage
cltResultSet.close();

// ...

// Est ce que l'objet Statement est encore valide
if (statement.isClosed()) {
    throw new RuntimeException("Statement is closed");
}

ResultSet cmdResultSet = statement.executeQuery("SELECT * FROM T_COMMANDE");
while (cmdResultSet.next()) {
    // ...
}
// Faire le ménage
cmdResultSet.close();

// Faire le ménage
statement.close();

// Faire le ménage
connection.close();
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Chatbour
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
17 avril 2008 à 12:35
OK merci bien

moi je me disais peut être que la mémoire reste allouée et que les méthodes close() servent à la libérer.. ta réponse est dans la même gamme je pense..

Autre question (ah oui, t'aurais pas dû être si gentil et répondant si vite ) : est-ce l'oublie des méthodes close() entraine des failles de sécurité ?
0
Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
38
17 avril 2008 à 16:50
Salut:

Comme un objet de la classe Connection sert à véhiculer les données dépuis le programme client vers le SGBD (qui est probablement situé sur une machine distante).

Cet objet faire l'abstraction de cette communication (client/serveur). La méthode close() ferme le canal d'échange et libère les ressources allouées.

D'après la documentation, si tu oublies d'appeler la méthode close() les ressources allouées seront automatiquement libérées.

void close() throws SQLException

Releases this Connection object's database and JDBC resources immediately instead of waiting for them to be automatically released.

Mais ceci, n'est pas un argument pour laisser les choses à tord et à travers.

Souviens toi toujours, il faut suivre les bonnes manières (Best Practices).
0
Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
38
17 avril 2008 à 16:54
Salut:

Dans certains cas pour ne pas oublier de libérer la connexion, on crée un [shutdown hook], c'est une unité d'exécution/Thread qui se lance lorsque l'application se terminera.

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
       try {
          if (connection != null && !connection.isClosed()) {
                connection.close(); 
          }
       } catch(SQLException e) {
          e.printStackTrace();
       }
    }
});
0
cs_Chatbour
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
17 avril 2008 à 19:12
Merci beaucoup Ombitious_Developper

très intéressante l'idée d'ajouter un shutdownHook : je vais la tester quand j'aurai l'occasion !
0
cs_mtin
Messages postés
1
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
15 avril 2010

15 avril 2010 à 20:17
Salut,
Stp je cherche a faire un simple code pour authentification sous netbeans en webservice ,mais je me bloque au dessus.je me bloque surtout au niveau de la vérification( la partie if ) je sais pas quoi écrire exactement :(
Can you help me please ?
0