Plusieurs requete sur le meme statement [Résolu]

NewJavaLearner 36 Messages postés mercredi 22 août 2007Date d'inscription 28 avril 2012 Dernière intervention - 17 avril 2008 à 09:00 - Dernière réponse :  abdelatif
- 27 nov. 2014 à 11:38
Apprendre c'est vivre.
Afficher la suite 

10 réponses

Répondre au sujet
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 17 avril 2008 à 09:34
+3
Utile
1
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Ombitious_Developper
NewJavaLearner 36 Messages postés mercredi 22 août 2007Date d'inscription 28 avril 2012 Dernière intervention - 17 avril 2008 à 09:49
0
Utile
Merci énormement
Apprendre c'est vivre.
Commenter la réponse de NewJavaLearner
cs_Chatbour 764 Messages postés jeudi 27 juillet 2006Date d'inscription 6 septembre 2010 Dernière intervention - 17 avril 2008 à 11:40
0
Utile
Salut à tous

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

cmdResultSet.close() ? également


connection.close() ?
Commenter la réponse de cs_Chatbour
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 17 avril 2008 à 12:18
0
Utile
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();
Commenter la réponse de Ombitious_Developper
cs_Chatbour 764 Messages postés jeudi 27 juillet 2006Date d'inscription 6 septembre 2010 Dernière intervention - 17 avril 2008 à 12:35
0
Utile
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é ?
Commenter la réponse de cs_Chatbour
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 17 avril 2008 à 16:50
0
Utile
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).
Commenter la réponse de Ombitious_Developper
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 17 avril 2008 à 16:54
0
Utile
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();
       }
    }
});
Commenter la réponse de Ombitious_Developper
cs_Chatbour 764 Messages postés jeudi 27 juillet 2006Date d'inscription 6 septembre 2010 Dernière intervention - 17 avril 2008 à 19:12
0
Utile
Merci beaucoup Ombitious_Developper

très intéressante l'idée d'ajouter un shutdownHook : je vais la tester quand j'aurai l'occasion !
Commenter la réponse de cs_Chatbour
cs_mtin 1 Messages postés jeudi 15 avril 2010Date d'inscription 15 avril 2010 Dernière intervention - 15 avril 2010 à 20:17
0
Utile
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 ?
Commenter la réponse de cs_mtin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.