Java Database Connectivity ( JDBC ) Application Programmer Interface ( API) giver klasser for tilslutning til og adgang til tabeldata , herunder relationelle databaser . ResultSet klassen indeholder metoder til at hente , navigering, og manipulere databaseforespørgsel resultater. Eksempel Environment
I de følgende eksempler , vil du oprette forbindelse til en database ved navn "staff ", en enkelt tabel i denne database ved navn "mennesker ", der indeholder tre kolonner : " first_name ", " last_name ", " titel, "og" løn ". Dit bord indeholder følgende records :
Bob , Smith, Kontorassistent , 23.50Ted , Anderson, Designer, 38.00Fred , Johnson, programmør, 32.25Alice , Anderson, ingeniør, 46.75Bob , Clark , Internt , 15.00Carol , Smith , Manager , 42.50
Query database
oprette en database Connection og oprette en erklæring objekt ved at ringe til vores Connection objektets createStatement () funktion .
< p > String url = " jdbc : mysql ://localhost /ansatte"; Connection conn = DriverManager.getConnection ( url , " brugernavn" , "password "); Statement st = conn.createStatement ();
Opret en forespørgsel streng, der indeholder et gyldigt SQL forespørgsel erklæring
String query = "SELECT first_name , last_name FROM folk " .
Opret et ResultSet objekt ved hjælp af Statement objekt for at udføre forespørgslen til databasen .
ResultSet rs = st.executeQuery (forespørgsel ),
ResultSet objekt , rs , nu indeholder resultaterne af forespørgslen , nemlig " first_name " og " last_name " kolonner for hver post i "folk "-tabellen .
Adgang til Query Results
ResultSet objektet har en markør , der i første omgang tyder ikke på nogen rekord. Ring ResultSet første ( ) funktionen til at flytte markøren til den første record indehaves af ResultSet objekt. ResultSet os få funktioner giver adgang til indholdet af hver kolonne ved hjælp af kolonnen navn fra databasen tabellen. Brug getString (String columnLabel ) for at hente indholdet af VARCHAR kolonner " first_name " og " last_name . "
Rs.first (); String fn = rs.getString ( " first_name ") String ln = rs . getString ( " last_name ") System.out.println ( ln + " , " + fn ),
sidste linje over prints : Hej
Smith , Bob
Ring ResultSet sidste ( ) funktionen til at flytte markøren til den sidste rekord indehaves af den ResultSet objekt
rs.last (); . fn = rs.getString ( " first_name ") ln = rs.getString ( " last_name ") System.out.println ( ln +" , "+ fn ),
sidste linje over prints : Hej
Smith , Carol
Stepping gennem Query Results
Typisk vil du ønsker at få adgang til alle de resultater, der returneres af forespørgslen. ResultSet næste () funktionen flytter markøren frem til den næste post . Når markøren flyttes forbi slutningen af resultatet sæt den næste ( )-funktionen giver NULL, så du kan bruge returværdien at flygte fra en while-løkke
Statement st = conn.createStatement (). ; String query = "SELECT * FROM folk, hvor løn > 30 " ResultSet rs = st.executeQuery (forespørgsel ),
while ( rs.next ( )) { String fn = rs.getString ( " first_name " ), String ln = rs.getString ( " last_name ") System.out.println ( fn + "" + ln );}
mens loop trin gennem hver post i resultatet , og udskriver :
Ted AndersonFred JohnsonAlice AndersonCarol Smith
ResultSet tidligere () funktionen flytter markøren baglæns én post i resultatet , og returnerer NULL , når markøren er flyttet før den første record. Dette giver dig mulighed for at gå baglæns gennem resultatet sæt og bruge returværdien fra den forrige () funktionen til at undslippe en while-løkke . Fortsat eksemplet ovenfor blev markøren efterladt placeret efter den sidste record i resultatet . Brug det forrige () funktion walk baglæns gennem forespørgslen resultater , trykning titel og løn kolonner fra hver post . Brug ResultSet s getFloat (String columnLabel ) funktion til at få adgang til indholdet af FLOAT kolonnen " løn " : Hej
while ( rs.previous ( )) { String t = rs.getString ( "title ") int w = rs.getFloat ( " løn ") System.out.println ( fn + " $ " + ln );}
mens loop skridt baglæns gennem hver post i resultatet , og udskriver : Hej
manager $ 42.50Engineer $ 46.75Programmer $ 32.25Designer 38,00 dollar
Random Access Navigation
ResultSet tilbyder funktioner til at bevæge markøren vilkårligt gennem posterne i et resultatsæt. Hent alle poster , der er indeholdt i "folk "-tabellen , sorteret efter de " last_name " og derefter " FIRST_NAME " kolonner:
Statement st = conn.createStatement (); String query = "SELECT * FROM folk ordre ved last_name , first_name " ResultSet rs = st.executeQuery (forespørgsel ),
sæt resultatet indeholder : Hej
Alice, Anderson, ingeniør, 46.75Ted , Anderson, Designer, 38.00Bob , Clark , Internt , 15.00Fred , Johnson, programmør, 32.25Bob , Smith , Kontorassistent , 23.50Carol , Smith , Manager , 42,50
Brug absolutte ( int række) funktion til at indstille markøren til en bestemt række i resultatet . En positiv værdi for rækken parameter flytte markøren fremad fra før starten af resultatet sæt . En negativ værdi for rækken parameter flytte markøren frem fra slutningen af resultatet set : Hej
rs.absolute (3), String fn = rs.getString ( " first_name ") String ln = rs . getString ( " last_name ") System.out.println ( fn + "" + ln )
rs.absolute (5), String fn = rs.getString ( " first_name ") String ln = rs . getString ( " last_name ") System.out.println ( fn + "" + ln )
rs.absolute (-1 ), String fn = rs.getString ( " first_name "); String ln = rs.getString ( " last_name ") System.out.println ( fn + "" + ln )
rs.absolute ( -3 ), String fn = rs.getString ( " first_name "); String ln = rs.getString ( " last_name ") System.out.println ( fn + "" + ln )
print udsagn ovenstående output : Hej
Bob ClarkBob SmithCarol SmithFred Johnson < br >
Videre relative brug ( int række) for at flytte markøren frem eller tilbage i forhold til den aktuelle position. Markøren blev efterladt placeret ved den fjerde registrering af resultatet sæt . Flyt det fremad to rækker , så tilbagestående fire rækker:
rs.relative (2) , fn = rs.getString ( " first_name ") ln = rs.getString ( " last_name "); System.out . println (fn + "" + ln )
rs.relative (-4 ), fn = rs.getString ( " first_name ") ln = rs.getString ( " last_name "); System.out . println (fn + "" + ln )
print udsagn i ovenstående kode output : Hej
Carol SmithTed Anderson
Ændring af Results
< br >
ændre indholdet af et resultat sæt via ResultSet opdateringsservere funktioner. Brug updateString (String columnLabel , String x ) for at ændre alle poster, der matcher " Bob " i " first_name " kolonnen til " Robert ". Brug beforeFirst () funktionen til at nulstille markøren til før begyndelsen af resultatet indstillet, så du kan gå gennem den opdaterede resultatet sæt og udskrive de nye værdier :
String query = "SELECT * FROM folk" ; ResultSet rs = st.executeQuery (forespørgsel ),
while ( rs.next ( )) { String fn = rs.getString ( " first_name ") if ( fn.equals ( " Bob " ) { rs.updateString ( " first_name ", " Robert" );}} rs.beforeFirst () , mens ( rs.next ( )) { String fn = rs.getString ( " first_name ") String ln = rs.getString ( " last_name " ) ; System.out.println ( fn + "" + ln );}
følgende resultater udskrives : Hej
Robert SmithTed AndersonFred JohnsonAlice AndersonRobert ClarkCarol Smith
håndtering fejl
Mange af ResultSet funktioner smide en SQLException . Bedste praksis dikterer kastet fejl bør fanges og håndteres. SQLException budskab kan være meget nyttige i debugging forbindelse og forespørgsel fejl. inddæmmes din forbindelse og forespørgslen kode i try-catch blokke
try { String url = " jdbc : mysql ://localhost /ansatte"; . Connection conn = DriverManager.getConnection ( url , " brugernavn" , "password" ), Erklæring st = conn . createStatement ();
String query = "SELECT first_name , last_name FROM folk " ResultSet rs = st.executeQuery (forespørgsel ),
while ( rs.next ( )) { String fn = rs.getString ( " first_name ") String ln = rs.getString ( " last_name ") System.out.println ( fn + "" + ln );}} catch ( SQLException ex ) { System.out.println ( ex.getMessage ()); }
Clean Up
ResultSet objekt lukkes automatisk , når sætningsobjekt bruges til at skabe det er tæt i lukket et ResultSet . objekt vil automatisk frigøre ressourcer Tving et ResultSet objekt til at frigive alle de JDBC og database ressource det holde ved at kalde den tætte () funktion Luk ResultSet objekt , rs , fra ovenstående eksempler : . .
rs.close ( )