2010-10-06 2 views
0

Étant donné l'exemple suivant (supposé être correct JDBC, mais je suis Noob):Comment fonctionne createStatement/executeQuery/next?

Connection conn = getConnection(); 
Statement st = conn.createStatement(); 

ResultSet rs = st.executeQuery("SELECT NAME FROM USERS"); 
while(rs.next()) 
{ 
    string name = rs.getString("NAME"); 
    //... 
} 

À quel moment est l'information NOM transféré de la base de données au programme? Est-ce à chaque fois que getString est appelée? Si oui, est-il également possible de collecter les noms pour tous les utilisateurs dans une opération d'E/S?

+0

@ user93197 - Quel langage de programmation utilisez-vous? – InSane

Répondre

0

Il se peut que je comprends mal la question, mais répondant, d'après ce que je pense que vous vous demandez:

Toutes les informations sont extraites de la base de données lorsque vous exécutez

ResultSet rs = st.executeQuery("SELECT NAME FROM USERS"); 

Toutes les opérations effectuées sur rs après cela aura lieu dans la mémoire du programme, et non sur la base de données.

Je ne suis pas sûr de ce que vous voulez dire s'il est possible de collecter les noms pour tous les utilisateurs dans une opération d'E/S.

+0

Donc, s'il y a beaucoup d'utilisateurs dans la base de données, le fichier executeQuery peut provoquer un débordement de mémoire? – KeyboardDrummer

+0

J'espère que d'autres me corrigeront si je me trompe, mais oui. Je le pense. Cependant, cela ne devrait pas être un problème, sauf si vous avez un nombre énorme d'utilisateurs ou un serveur extrêmement sous-alimenté. Peut-être les deux. – kskjon

+0

Depuis le premier commentaire sur: http://stackoverflow.com/questions/3868500/purpose-of-splitting-a-select-query-into-chunks J'ai vraiment l'impression qu'une action d'E/S est effectuée sur chaque rs.next() appel. Cela signifierait que executeQuery ne transfère aucune information de ligne réelle au programme. – KeyboardDrummer