La Java Database Connectivity ( JDBC ) Application Programmer Interface (API) fournit des classes pour la connexion et l'accès aux données tabulaires , y compris les bases de données relationnelles. La classe ResultSet fournit des méthodes pour récupérer , la navigation et la manipulation des résultats de requête de base de données . Exemple Environnement
Dans les exemples suivants , vous connecter à une base de données nommée « personnel», une table unique dans cette base de données nommée «peuple» contenant trois colonnes : " prenom ", " last_name ", " titre »et« salaire ». Votre table contient les enregistrements suivants:
Bob Smith , greffier , 23.50Ted , Anderson, Designer, 38.00Fred , Johnson, programmeur , 32.25Alice , Anderson , ingénieur , 46.75Bob , Clark , stagiaire , 15.00Carol , Smith , gestionnaire, 42.50
interroger la base
créer une connexion de base de données et créer un objet Statement en appelant la fonction de createStatement () de notre objet Connection.
< p > Chaîne url = " jdbc: mysql ://localhost /personnel " ; Connection conn = DriverManager.getConnection (url, "username" , "password" ) ; Déclaration st = conn.createStatement ();
Créer une chaîne de requête contenant une requête déclaration
requête SQL string valide = " SELECT prenom , last_name de personnes »; .
Créer un objet ResultSet en utilisant l'objet Statement pour exécuter la requête à la base de données .
ResultSet rs = st.executeQuery ( query);
l'objet ResultSet , rs , contient maintenant les résultats de la requête : le " prenom " et colonnes " last_name " pour chaque enregistrement le tableau «people» .
Accès aux résultats de la requête
l'objet ResultSet a un curseur , qui ne initialement pointez sur un dossier. First () fonction de ResultSet appeler pour déplacer le curseur sur le premier record détenu par l'objet ResultSet. Fonctions GET ResultSet permettent d'accéder aux contenus de chaque colonne en utilisant le nom de la colonne de la table de base de données . Utilisez getString (String columnLabel ) pour récupérer le contenu de la VARCHAR colonnes " prenom " et
rs.first " nom_famille . " (); Cordes fn = rs.getString ( " prenom "); cordes ln = rs . getString ( " last_name "); System.out.println (ln + "," + fn) ;
La dernière ligne ci-dessus impressions :
Smith, Bob
last () fonction de ResultSet appeler pour déplacer le curseur sur le dernier record détenu par l'objet ResultSet
rs.last (); . fn = rs.getString ( " prenom "); ln = rs.getString ( " nom_famille "); System.out.println (ln + ", " + fn) ;
La dernière ligne ci-dessus impressions :
Smith, Carol
Stepping Grâce à la Query Results
Typiquement, vous voudrez accéder à tous les résultats retournés par la requête. Next () fonction de ResultSet déplace le curseur vers l'avant à l'enregistrement suivant . Lorsque le curseur est déplacé au-delà de la fin du jeu de résultats, l' ) fonction suivante ( renvoie NULL , ce qui vous permet d'utiliser la valeur de retour d'échapper à une boucle while
Déclaration st = conn.createStatement (). ; String query = "SELECT * FROM personnes où salaire > 30" ; ResultSet rs = st.executeQuery ( query);
while ( rs.next ()) {String fn = rs.getString ( " prenom " ) ; cordes ln = rs.getString ( " last_name "); System.out.println (fn + "" + ln) ; }
tandis que les étapes de parcourir chaque dossier dans le jeu de résultats et impressions : fonction précédente () de
Ted AndersonFred JohnsonAlice AndersonCarol Smith &
ResultSet déplace le curseur vers l'arrière d'un enregistrement dans le jeu de résultats, et renvoie NULL lorsque le curseur s'est déplacé avant le premier enregistrement . Cela vous permet de marcher à reculons à travers l'ensemble de résultats et d'utiliser la valeur de retour de la fonction précédente () pour échapper à une boucle while. En reprenant l'exemple ci-dessus, le curseur a été positionné à gauche après le dernier enregistrement dans le jeu de résultats. Utilisez le précédent ( de marche) de fonction en arrière dans les résultats de la requête , l'impression du titre et colonnes de salaire de chaque enregistrement. Utilisez getFloat (String columnLabel ) la fonction de ResultSet pour accéder au contenu de la colonne FLOAT «salaire» :
while ( rs.previous ()) {String t = rs.getString ( "title" ) ; int w = rs.getFloat ( " salaires "); System.out.println (fn + "$" + ln) ; }
tandis que les étapes de la boucle arrière dans chaque enregistrement dans le jeu de résultats et impressions :
directeur 42.50Engineer $ $ $ 46.75Programmer 32.25Designer 38,00 $
Random Access navigation
ResultSet offre des fonctions pour déplacer le curseur arbitrairement par les enregistrements dans un jeu de résultats. Récupérer tous les enregistrements contenus dans la table «peuple» , triées par le " last_name " puis " prenom " colonnes:
Déclaration st = conn.createStatement () ; String query = "SELECT * FROM personnes afin de nom_famille , prenom " ; ResultSet rs = st.executeQuery ( query);
Le jeu de résultats contient:
Alice, Anderson , ingénieur , 46.75Ted , Anderson, designer, 38.00Bob , Clark , stagiaire , 15.00Fred , Johnson, programmeur , 32.25Bob , Smith , greffier , 23.50Carol , Smith , gestionnaire, 42.50
Utilisez la fonction absolue (int row) pour placer le curseur sur une ligne spécifique dans le jeu de résultats. Une valeur positive pour le paramètre de ligne pour déplacer le curseur vers l'avant depuis avant le début de l'ensemble de résultats . Une valeur négative pour le paramètre de ligne va déplacer le curseur vers l'arrière à partir de la fin du jeu de résultats :
rs.absolute (3); cordes fn = rs.getString ( " prenom "); cordes ln = rs . getString ( " last_name "); System.out.println (fn + "" + ln) ;
rs.absolute (5); cordes fn = rs.getString ( " prenom "); cordes ln = rs . getString ( " last_name "); System.out.println (fn + "" + ln) ;
rs.absolute (-1) ; cordes fn = rs.getString ( " prenom "); cordes ln = rs.getString ( " last_name "); System.out.println (fn + "" + ln) ;
rs.absolute (-3) ; cordes fn = rs.getString ( " prenom "); chaîne ln = rs.getString ( " last_name "); System.out.println (fn + "" + ln) ;
Les états d'impression ci-dessus sortie :
Bob ClarkBob SmithCarol SmithFred Johnson
continue , utilisez relative ( int row) pour déplacer le curseur vers l'arrière ou vers l'avant par rapport à la position actuelle. Le curseur a été laissé placé à la quatrième enregistrement de l'ensemble des résultats . Faire avancer deux rangées , puis en arrière quatre lignes:
rs.relative ( 2); fn = rs.getString ( " prenom "); ln = rs.getString ( " last_name " ); System.out . println (fn + "" + ln) ;
rs.relative (-4) ; fn = rs.getString ( " prenom "); ln = rs.getString ( " last_name "); System.out . println (fn + "" + ln) ;
les états d'impression dans la sortie du code ci-dessus :
Carol Anderson SmithTed
Modifier les résultats
Modifier le contenu d'un jeu de résultats à l'aide des fonctions de mise à jour de ResultSet . Utilisez updateString (String columnLabel , String x ) pour changer tous les enregistrements correspondants "Bob" dans la colonne " prenom " à " Robert ". Utilisez la fonction beforeFirst () pour réinitialiser le curseur à avant le début du jeu de résultats si vous pouvez marcher à travers l'ensemble des résultats mis à jour et imprimer les nouvelles valeurs :
String query = "SELECT * FROM personnes " ; ResultSet rs = st.executeQuery ( query);
while ( rs.next ()) {String fn = rs.getString ( " prenom "); if ( fn.equals ( "Bob" ) { rs.updateString ( " prenom ", " Robert" );}} rs.beforeFirst (); while ( rs.next ()) {String fn = rs.getString ( " prenom "); cordes ln = rs.getString ( " last_name " ) ; System.out.println (fn + "" + ln) ; }
Les résultats suivants sont imprimés :
Robert SmithTed AndersonFred JohnsonAlice AndersonRobert ClarkCarol Smith
Gestion des erreurs
Beaucoup des fonctions de ResultSet lancer une SQLException . meilleure pratique dicte erreurs générées doivent être attrapés et manipulés . le message de SQLException peut être très utile pour le débogage des erreurs de connexion et de requête . Contenir votre connexion et le code de la requête en try-catch blocs
try {String url = " jdbc: mysql ://localhost /personnel " ; . Connection conn = DriverManager.getConnection (url, "username" , "password" ); Déclaration st = conn . createStatement ();
String query = " SELECT prenom , nom_famille de personnes »; ResultSet rs = st.executeQuery ( query);
while ( rs.next ()) {String fn = rs.getString ( " prenom "); cordes ln = rs.getString ( " last_name "); System.out.println (fn + "" + ln) ;} } catch ( SQLException ex) { System.out.println ( ex.getMessage ()); }
Clean Up
un objet ResultSet se ferme automatiquement lorsque l'objet Statement utilisé pour créer il est proche lorsqu'il est fermé, un ResultSet. objet publiera automatiquement les ressources de forcer un objet ResultSet pour libérer toutes les ressources JDBC et base de données qu'il détient en appelant la fonction close () Fermez l'objet ResultSet , rs , à partir des exemples ci-dessus : . .
rs.close ( ) ;