Die Java Database Connectivity (JDBC) Application Programmer Interface (API) stellt Klassen für den Anschluss an und den Zugriff auf tabellarische Daten, einschließlich relationale Datenbanken. Das ResultSet -Klasse stellt Methoden zum Abrufen , Navigieren und Manipulieren von Datenbank- Abfrage-Ergebnisse . Beispiel Umwelt
In den folgenden Beispielen , werden Sie zu einer Datenbank namens " Personal ", eine einzelne Tabelle innerhalb der Datenbank mit dem Namen " Menschen " enthält drei Spalten verbinden : "Vorname ", " nachname ", " Titel "und" Lohn . " Ihre Tabelle enthält die folgenden Informationen :
Bob , Smith, Clerk , 23.50Ted , Anderson, Designer , 38.00Fred , Johnson , Programmierer, 32.25Alice , Anderson , Ingenieur, 46.75Bob , Clark, Intern, 15.00Carol , Smith, Manager 42.50
die Datenbank abfragen
erstellen Sie eine Datenbank -Verbindung und erstellen Sie ein Statement-Objekt durch den Aufruf unserer Connection-Objekts createStatement ()-Funktion .
< p > String url = " jdbc : mysql ://localhost /Personal "; Connection conn = DriverManager.getConnection ( url , "username" , "password" ); Statement st = conn.createStatement ();
erstellen eine Abfrage-String , der einen gültigen SQL -Abfrage-Anweisung
String query = "SELECT vorname, nachname FROM Personen "; .
erstellen ResultSet Objekt mithilfe des Statement-Objekts , um die Abfrage der Datenbank ausführen .
ResultSet rs = st.executeQuery ( query);
Das ResultSet-Objekt , rs , enthält nun die Ergebnisse der Abfrage : die " vorname " und " nachname " Spalten für jeden Datensatz in die "Menschen " Tisch.
Zugriff auf die Query- Ergebnisse
Das ResultSet-Objekt hat einen Cursor , der zunächst nicht zu beliebigen Datensatz. Rufen ResultSet erste ()-Funktion , um den Cursor auf dem ersten Eintrag vom ResultSet-Objekt gehalten zu bewegen. ResultSet get- Funktionen ermöglichen den Zugriff auf den Inhalt jeder Spalte mit den Namen der Spalte aus der Datenbank -Tabelle. Verwenden getString (String columnLabel ) , um den Inhalt des VARCHAR-Spalten "Vorname " und " last_name . "
Rs.first () abzurufen ; String fn = rs.getString ( "Vorname "); String ln = rs . getString ( " nachname "); System.out.println (ln + "," + fn) ;
Die letzte Zeile oben Drucke :
Smith, Bob
Rufen ResultSet letzte ()-Funktion , um den Cursor zum letzten Datensatz der ResultSet-Objekt gehalten bewegen
rs.last (); . fn = rs.getString ( "Vorname "); ln = rs.getString ( " last_name "); System.out.println (ln +", " + fn) ;
Die letzte Zeile oben Drucke :
Smith, Stepping Carol
durch die Abfrage Ergebnisse
der Regel werden Sie wollen , um alle Ergebnisse von der Abfrage zurückgegeben zugreifen . ResultSet die next () -Funktion wird der Cursor auf den nächsten Datensatz. Wenn der Cursor über das Ende der Ergebnismenge bewegt wird, die next () -Funktion gibt NULL , so dass Sie den Rückgabewert verwenden, um von einer while-Schleife entkommen
Statement st = conn.createStatement () . String query = "SELECT * FROM Menschen, wo Lohn > 30 "; ResultSet rs = st.executeQuery ( query);
while ( rs.next () ) {String fn = rs.getString ( "Vorname " ); String ln = rs.getString ( " nachname "); System.out.println (fn + "" + ln) ;}
die while-Schleife Schritte durch jeden Datensatz in der Ergebnismenge und Drucke :
Ted AndersonFred JohnsonAlice AndersonCarol Smith
ResultSet früheren ()-Funktion bewegt den Cursor rückwärts einen Datensatz in der Ergebnismenge und gibt NULL zurück, wenn der Cursor vor dem ersten Datensatz bewegt hat . Dies ermöglicht Ihnen, rückwärts zu gehen durch die Ergebnismenge und benutzen den Rückgabewert aus dem vorherigen ()-Funktion , um eine while-Schleife zu entkommen. Fortsetzung des obigen Beispiels wurde der Cursor nach links positioniert nach dem letzten Datensatz in der Ergebnismenge. Verwenden Sie die vorherige ()-Funktion zu Fuß rückwärts durch die Abfrage-Ergebnisse , den Druck der Lohn- Titel und Spalten aus jedem Datensatz . Verwenden ResultSet getFloat (String columnLabel )-Funktion , um den Inhalt der Spalte FLOAT " Lohn" zugreifen :
while ( rs.previous () ) {String t = rs.getString ( "title "); int w = rs.getFloat ( " Lohn" ); System.out.println (fn + "$" + ln) ;}
die while-Schleife Schritte rückwärts durch jeden Datensatz in der Ergebnismenge und Drucke :
-Manager $ $ 42.50Engineer 46.75Programmer $ 32.25Designer 38,00 $
Random Access Navigation
ResultSet bietet Funktionen zum Bewegen des Cursors willkürlich durch die Datensätze in einer Ergebnismenge . Rufen Sie alle Datensätze von der "Menschen "-Tabelle , von der " last_name " und dann " vorname " Spalten sortiert enthalten :
Statement st = conn.createStatement (); String query = "SELECT * FROM Menschen um durch last_name , vorname "; ResultSet rs = st.executeQuery ( query);
Das Ergebnis Set bestehend aus:
Alice , Anderson , Ingenieur, 46.75Ted , Anderson, Designer , 38.00Bob , Clark, Intern , 15.00Fred , Johnson , Programmierer, 32.25Bob , Smith, Clerk , 23.50Carol , Smith, Manager 42.50
Verwenden Sie die absolute ( int row )-Funktion , um den Cursor auf eine bestimmte Zeile in der Ergebnis -Set. Ein positiver Wert für die Zeile Parameter den Cursor vorwärts zu bewegen aus der Zeit vor dem Beginn des Resultsets. Ein negativer Wert für die Zeile Parameter wird der Cursor rückwärts vom Ende der Ergebnismenge bewegen :
rs.absolute (3); String fn = rs.getString ( "Vorname "); String ln = rs . getString ( " nachname "); System.out.println (fn + "" + ln) ;
rs.absolute (5); String fn = rs.getString ( "Vorname "); String ln = rs . getString ( " nachname "); System.out.println (fn + "" + ln) ;
rs.absolute (-1) ; String fn = rs.getString ( "Vorname "); String ln = rs.getString ( " nachname "); System.out.println (fn + "" + ln) ;
rs.absolute (-3 ); String fn = rs.getString ( "Vorname "); String ln = rs.getString ( " nachname "); System.out.println (fn + "" + ln) ;
Die print-Anweisungen oben Ausgang :
Bob ClarkBob SmithCarol SmithFred Johnson
Weiterbildung , bezogen verwenden (int row) , um den Cursor vorwärts oder rückwärts relativ zur aktuellen Position zu bewegen. Der Cursor wurde auf dem vierten Satz der Ergebnismenge links positioniert . Move it auf zwei Zeilen , dann nach hinten vier Reihen :
rs.relative (2); fn = rs.getString ( " vorname "); ln = rs.getString ( " nachname "); System.out . println (fn + "" + ln) ;
rs.relative (-4) ; fn = rs.getString ( "Vorname "); ln = rs.getString ( " nachname "); System.out . println (fn + "" + ln) ;
die print-Anweisungen in den oben genannten Code-Ausgabe :
Carol SmithTed Anderson
Ändern der Ergebnisse