Plusieurs requete sur le meme statement [Résolu]

Signaler
Messages postés
36
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
28 avril 2012
-
 abdelatif -
Apprendre c'est vivre.

9 réponses

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
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.
SALAM ....merci beaucoup
Messages postés
36
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
28 avril 2012

Merci énormement
Apprendre c'est vivre.
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
Salut à tous

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

cmdResultSet.close() ? également


connection.close() ?
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
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();
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
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é ?
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
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).
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
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();
       }
    }
});
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
Merci beaucoup Ombitious_Developper

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

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 ?