The Java Database Connectivity ( JDBC) Application Programmer Interface ( API ) gir klasser for å koble til og få tilgang til data i tabellform , inkludert relasjonsdatabaser. ResultSet klassen inneholder metoder for å hente , navigere , og manipulere databasen søkeresultatene. Eksempel Miljø
I de følgende eksemplene , vil du koble til en database som heter " ansatte ", en enkel tabell i databasen som heter "folk" som inneholder tre kolonner : " first_name ", " etternavn ", " tittelen , "og" lønn ". Bordet inneholder følgende poster :
Bob , Smith , Clerk , 23.50Ted , Anderson , Designer, 38.00Fred , Johnson , Programmerer, 32.25Alice , Anderson , Engineer , 46.75Bob , Clark , Intern , 15.00Carol , Smith , leder, 42.50
søke i databasen
Lag en database tilkobling og lage en erklæring objekt ved å ringe vår Connection objektets createStatement ( )-funksjonen .
< p > String url = " jdbc : mysql ://localhost /ansatte "; Connection conn = DriverManager.getConnection ( url , "brukernavn" , "passord "); Statement st = conn.createStatement ();
Lag en spørring streng som inneholder en gyldig SQL-spørring uttalelse
String query = " SELECT fornavn, etternavn FROM folk "; .
Opprett en ResultSet objekt ved hjelp av erklæringen objektet for å utføre spørringen til databasen .
ResultSet rs = st.executeQuery (spørring ) ;
ResultSet objekt, rs , inneholder nå resultatene av spørringen : den " first_name " og " etternavn " kolonner for hver post i "folk " tabellen .
tilgang Query Resultater
ResultSet objektet har en markør , som i utgangspunktet ikke peker på noen rekord . Ring ResultSet første ()-funksjonen for å flytte markøren til den første posten holdt av ResultSet objektet . ResultSet oss få funksjoner gir tilgang til innholdet i hver kolonne ved hjelp av kolonnen navn fra databasen tabellen . Bruk getString (String columnLabel ) for å hente innholdet i VARCHAR kolonner " first_name " og " etternavn ".
Rs.first (); String fn = rs.getString ( " first_name "); String ln = rs . getString ( " etternavn "); System.out.println ( ln + " , " + fn ) ;
Den siste linjen ovenfor utskrifter : en
Smith , Bob
Ring ResultSet siste ()-funksjonen til å flytte markøren til den siste posten holdt av ResultSet objektet
rs.last (); . fn = rs.getString ( " first_name "); ln = rs.getString ( " last_name "); System.out.println ( ln +" , "+ fn ) ;
Den siste linjen ovenfor utskrifter : en
Smith , Carol
Stepping gjennom resultater fra spørring
Vanligvis vil du ønsker å få tilgang til alle resultatene som returneres av spørringen . ResultSet neste ( )-funksjonen flytter markøren frem til neste post . Når markøren flyttes forbi slutten av resultatet sett , den neste ( )-funksjonen returnerer NULL , slik at du kan bruke returverdien å flykte fra en while-loop
Statement st = conn.createStatement ( ) . ; String query = "SELECT * FROM folk der lønn > 30 "; ResultSet rs = st.executeQuery (spørring ) ;
while ( rs.next ( ) ) { String fn = rs.getString ( " first_name " ) ; String ln = rs.getString ( " etternavn "); System.out.println (fn + " " + ln ) ;}
mens sløyfe trinn gjennom hver post i resultatsettet , og utskrifter :
Ted AndersonFred JohnsonAlice AndersonCarol Smith
ResultSet tidligere ( )-funksjonen beveger markøren bakover én post i resultatsettet , og returnerer NULL når markøren har flyttet før den første posten . Dette tillater deg å gå baklengs gjennom resultatsettet og bruke returverdien fra den forrige ( )-funksjonen for å unnslippe en stund loop. Fortsetter eksempelet ovenfor , ble markøren igjen plassert etter den siste posten i resultatsettet. Bruk den forrige ( )-funksjonen spasertur bakover gjennom søkeresultatene , skriver tittel og lønn kolonner fra hver post . Bruk ResultSet er getFloat (String columnLabel )-funksjonen for å få tilgang til innholdet av flottøren kolonnen " lønn" : en
while ( rs.previous ( ) ) { String t = rs.getString ( "title "); int w = rs.getFloat ( " lønn" ); System.out.println (fn + "$" + ln ) ;}
mens sløyfe skritt bakover gjennom hver post i resultatsettet , og utskrifter :
leder $ 42.50Engineer $ 46.75Programmer $ 32.25Designer $ 38,00
Random Access Navigering
ResultSet tilbyr funksjoner for å flytte markøren vilkårlig gjennom postene i et resultatsett. Hente alle postene inneholdt av "folk " tabellen , sortert etter " etternavn " og deretter " first_name " kolonner:
Statement st = conn.createStatement ( ) ; String query = "SELECT * FROM folk rekkefølge etter etternavn , first_name "; ResultSet rs = st.executeQuery (spørring ) ;
resultatet sette inneholder : en
Alice , Anderson , Engineer , 46.75Ted , Anderson , designer, 38.00Bob , Clark , Intern , 15.00Fred , Johnson , Programmerer, 32.25Bob , Smith , Clerk , 23.50Carol , Smith , leder, 42.50
Bruk den absolutte ( int rad )-funksjonen til å sette markøren til en bestemt rad i resultatsettet . En positiv verdi for raden parameter vil flytte markøren fremover fra før begynnelsen av resultatsettet. En negativ verdi for raden parameter vil flytte markøren bakover fra slutten av resultatet sett : en
rs.absolute ( 3 ) ; String fn = rs.getString ( " first_name "); String ln = rs . getString ( " etternavn "); System.out.println (fn + " " + ln ) ;
rs.absolute ( 5 ) ; String fn = rs.getString ( " first_name "); String ln = rs . getString ( " etternavn "); System.out.println (fn + " " + ln ) ;
rs.absolute ( -1 ) ; String fn = rs.getString ( " first_name "); String ln = rs.getString ( " etternavn "); System.out.println (fn + " " + ln ) ;
rs.absolute ( -3 ) ; String fn = rs.getString ( " first_name "); String ln = rs.getString ( " etternavn "); System.out.println (fn + " " + ln ) ;
print uttalelser ovenfor utgang:
Bob ClarkBob SmithCarol SmithFred Johnson
Fortsetter , bruker relative ( int rad ) for å flytte markøren bakover eller forover i forhold til den aktuelle posisjonen. Markøren ble igjen plassert på den fjerde plate av resultatet settet. Flytte den frem to rader, deretter bakover fire rekker:
rs.relative ( 2 ), fn = rs.getString ( " first_name "); ln = rs.getString ( " etternavn "); System.out . println (fn + " " + ln ) ;
rs.relative ( -4 ), fn = rs.getString ( " first_name "); ln = rs.getString ( " etternavn "); System.out . println (fn + " " + ln ) ;
print uttalelser i koden ovenfor utgang : en
Carol SmithTed Anderson
Endre Resultater
endre innholdet i et resultat sett med ResultSet sin update . Bruk updateString (String columnLabel , String x ) for å endre alle poster som samsvarer " Bob " i " first_name "-kolonnen til " Robert ". Bruk beforeFirst ()-funksjonen for å nullstille markøren til før begynnelsen av resultatet satt slik at du kan gå gjennom den oppdaterte resultat sett og skrive ut de nye verdiene :
String query = "SELECT * FROM folk " ; ResultSet rs = st.executeQuery (spørring ) ;
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 ( " etternavn ") ; System.out.println (fn + " " + ln ) ;}
følgende resultater skrives : en
Robert SmithTed AndersonFred JohnsonAlice AndersonRobert ClarkCarol Smith
håndtering feil
Mange av ResultSet funksjoner kaste en SQLException . Beste praksis tilsier kastet feil skal bli fanget og håndtert . SQLException budskap kan være svært nyttig i debugging tilkobling og spørring feil . Inneholder din tilkobling og spørring kode i try-catch blokker
try { String url = " jdbc : mysql ://localhost /ansatte "; . Tilkobling conn = DriverManager.getConnection ( url , "brukernavn" , "passord" ) ; Statement st = conn . createStatement ();
String query = " SELECT fornavn, etternavn FROM folk "; ResultSet rs = st.executeQuery (spørring ) ;
while ( rs.next ( ) ) { String fn = rs.getString ( " first_name "); String ln = rs.getString ( " etternavn "); System.out.println (fn + " " + ln ) ;} } catch ( SQLException ex ) { System.err.println ( ex.getMessage ( )); }
Rydde opp
ResultSet objekt blir automatisk stengt når Statement objektet brukes til å lage det er nær når den er lukket , en ResultSet . objektet vil automatisk frigjøre ressurser Tving et ResultSet objekt å løslate alle JDBC og database ressurs det holder ved å ringe close () -funksjonen Lukk ResultSet objekt, rs , fra eksemplene ovenfor : . .
rs.close ( ) ;