De Java Database Connectivity ( JDBC ) Application Programmer Interface ( API ) biedt lessen voor de aansluiting op en de toegang tot gegevens in tabelvorm , waaronder relationele databases . De ResultSet klasse biedt methoden voor het ophalen , het navigeren en manipuleren database query resultaten . Voorbeeld Milieu In de volgende voorbeelden , zal u verbinding met een database genaamd " personeel ", een enkele tafel binnen die database genaamd " mensen " met drie kolommen : " voornaam " , " achternaam " , " titel , " en " loon . " Uw tabel bevat de volgende gegevens : Bob , Smith , Clerk , 23.50Ted , Anderson , Ontwerper , 38.00Fred , Johnson , Programmeur , 32.25Alice , Anderson , Ingenieur , 46.75Bob , Clark , Intern , 15.00Carol , Smith, Manager , 42.50 Query de Database Maak een database verbinding en maak een Statement-object door te bellen createStatement onze Connection object ( ) -functie . String url = " jdbc : mysql ://localhost /personeel " ; Connection conn = DriverManager.getConnection ( url , " gebruikersnaam " , " wachtwoord" ) ; Verklaring st = conn.createStatement ( ) ; maken een query string met een geldige SQL-query statement String vraag = " SELECT voornaam, achternaam FROM mensen " ; . Maak een ResultSet object met behulp van de verklaring object om de query uit te voeren naar de database . ResultSet rs = st.executeQuery (query ) ; de ResultSet object , rs , bevat nu de resultaten van de query : de " voornaam " en " achternaam " kolommen voor elke record in de "mensen" tafel . Toegang tot de Queryresultaten de ResultSet object een cursor , die aanvankelijk niet wijzen op enige record. Eerst bellen ( )-functie ResultSet 's om de cursor naar de eerste record in handen van de ResultSet object . Ophaalfuncties ResultSet de toegang tot de inhoud van elke kolom in naam kolom van de databasetabel . Gebruik getString ( String columnLabel ) om de inhoud van de VARCHAR kolommen ' voornaam ' en ' achternaam '. Rs.first ( ) ophalen ; String fn = rs.getString ( " voornaam " ) ; String ln = rs . getString ( " achternaam " ) ; System.out.println ( ln + " , " + fn ) ; De laatste regel hierboven afgedrukt : Smith , Bob Bel laatste ( )-functie ResultSet 's om de cursor te verplaatsen naar het laatste record in handen van de ResultSet object rs.last ( ) ; . fn = rs.getString ( " voornaam " ) ; ln = rs.getString ( " last_name " ) ; System.out.println ( ln + " , " + fn ) ; De laatste regel hierboven afgedrukt : Smith , Carol Stepping via de queryresultaten Meestal zal u toegang wilt krijgen tot alle geretourneerd door de query resultaten . Next ( )-functie ResultSet 's verplaatst de cursor naar het volgende record. Wanneer de cursor wordt verplaatst voorbij het einde van de resultaatset , de volgende ( ) functie retourneert NULL , zodat u de return waarde te gebruiken om te ontsnappen uit een while loop Verklaring st = conn.createStatement ( ) op . ; String query = "SELECT * FROM mensen waar loon > 30 " ; ResultSet rs = st.executeQuery (query ) ; terwijl ( rs.next ( ) ) { String fn = rs.getString ( " voornaam " ) ; String ln = rs.getString ( " achternaam " ) ; System.out.println (fn + " " + ln ) ; } de while lus doorloopt elke record in de resultaat set , en prenten : vorige ( ) functie Ted AndersonFred JohnsonAlice AndersonCarol Smith ResultSet 's verplaatst de cursor achterwaarts een record in de resultaat set , en retourneert NULL als de cursor vóór de eerste record is verhuisd . Dit stelt u in staat om terug te lopen door de resultaatset en gebruik de return waarde van de vorige ( ) functie om een while lus ontsnappen . Voortzetting van het voorbeeld hierboven , is de cursor links geplaatst na het laatste record in de resultaatset . Gebruik de vorige ( ) functie wandeling achteruit door de resultaten van de query , het afdrukken van de titel en de loon- kolommen van elke record . Gebruik getFloat ( String columnLabel ) functie ResultSet 's om toegang te krijgen tot de inhoud van de kolom FLOAT " loon " : terwijl ( rs.previous ( ) ) { String t = rs.getString ( " title " ) ; int w = rs.getFloat ( " loon " ) ; System.out.println ( fn + " $ " + ln ) ; } de while lus stappen achteruit door elk record in de resultaat set , en prenten : Manager $ 42.50Engineer $ 46.75Programmer $ 32.25Designer $ 38,00 Random Access Navigatie ResultSet biedt functies voor de cursor willekeurig bewegen door de records in een resultaat set . Ophalen van alle records die door de "mensen" tafel , gesorteerd op de " achternaam " en vervolgens " voornaam " kolommen : Verklaring st = conn.createStatement ( ) ; String query = "SELECT * FROM mensen om door last_name , first_name " ; ResultSet rs = st.executeQuery (query ) ; Het instellen resultaat bevat : Alice , Anderson , Ingenieur , 46.75Ted , Anderson , Ontwerper , 38.00Bob , Clark , Intern , 15.00Fred , Johnson , Programmeur , 32.25Bob , Smith , Clerk , 23.50Carol , Smith , Manager , 42.50 Gebruik de absolute ( int rij) functie om de cursor instellen dat een bepaalde rij in de resultaat set . Een positieve waarde voor de parameter rij zal de cursor naar voren verplaatsen van voor het begin van de resultaatset . Een negatieve waarde voor de parameter rij zal de cursor naar achteren vanaf het einde van de resultaatset te verplaatsen : rs.absolute ( 3 ) ; String fn = rs.getString ( " voornaam " ) ; String ln = rs . getString ( " achternaam " ) ; System.out.println (fn + " " + ln ) ; rs.absolute ( 5 ) ; String fn = rs.getString ( " voornaam " ) ; String ln = rs . getString ( " achternaam " ) ; System.out.println (fn + " " + ln ) ; rs.absolute ( -1 ) ; String fn = rs.getString ( " voornaam " ) ; String ln = rs.getString ( " achternaam " ) ; System.out.println (fn + " " + ln ) ; rs.absolute ( -3 ) ; String fn = rs.getString ( " voornaam " ) ; String ln = rs.getString ( " achternaam " ) ; System.out.println (fn + " " + ln ) ; De print statements bovenstaande uitvoer : Bob ClarkBob SmithCarol SmithFred Johnson < br > Voortzetting , gebruiken relatief ( int rij) om de cursor vooruit of achteruit ten opzichte van de huidige positie te verplaatsen . De cursor werd gelaten gepositioneerd op de vierde verslag van het resultaat set . Verplaatsen het naar twee rijen , dan naar achteren vier rijen : rs.relative ( 2 ) ; fn = rs.getString ( " voornaam " ) ; ln = rs.getString ( " achternaam " ) ; System.out . println (fn + " " + ln ) ; rs.relative ( -4 ) ; fn = rs.getString ( " voornaam " ) ; ln = rs.getString ( " achternaam " ) ; System.out . println (fn + " " + ln ) ; de print uitspraken in de bovenstaande code uitgang : Carol SmithTed Anderson wijzigen van de Resultaten < br > Wijzig de inhoud van een resultaat set met updatefuncties ResultSet 's . Gebruik updateString ( String columnLabel , String x ) om alle records matching " Bob " in de " voornaam " kolom te veranderen " Robert . " Gebruik de beforeFirst ( ) functie om de cursor terug te zetten naar vóór het begin van het resultaat te stellen , zodat u kunt wandelen door de bijgewerkte resultaat set en print de nieuwe waarden : String vraag = "SELECT * FROM mensen " ; ResultSet rs = st.executeQuery (query ) ; terwijl ( rs.next ( ) ) { String fn = rs.getString ( " voornaam " ) if ( fn.equals ( " Bob " ) { rs.updateString ( " voornaam " , " Robert " ) ; } } rs.beforeFirst ( ) , terwijl ( rs.next ( ) ) { String fn = rs.getString ( " voornaam " ) ; String ln = rs.getString ( " achternaam " ) System.out.println ( fn + " + ln " ) ; } De volgende resultaten worden afgedrukt : Robert SmithTed AndersonFred JohnsonAlice AndersonRobert ClarkCarol Smith Oplossen van fouten Veel van de functies ResultSet afstand een SQLException . Best practice dicteert gegooid fouten moeten worden gevangen en behandeld . SQLException 's boodschap kan zeer nuttig zijn bij het debuggen verbinding en query- fouten . Beperk uw verbinding en query- code in try-catch blokken try { String url = " jdbc : mysql ://localhost /personeel " ; . Connection conn = DriverManager.getConnection ( url , " gebruikersnaam " , " wachtwoord" ) ; Verklaring st = conn . createStatement ( ) ; String vraag = " SELECT voornaam, achternaam FROM mensen " ; ResultSet rs = st.executeQuery (query ) ; terwijl ( rs.next ( ) ) { String fn = rs.getString ( " voornaam " ) ; String ln = rs.getString ( " achternaam " ) ; System.out.println (fn + " " + ln ) ; } } catch ( SQLException ex ) { System.err.println ( ex.getMessage ( ) ) ; } Clean Up een ResultSet object wordt automatisch gesloten wanneer het Statement-object gebruikt om te creëren is het dicht bij gesloten , een ResultSet . object automatisch middelen vrij Dwing een ResultSet object om alle JDBC en database resource te houden vrij te maken door te bellen naar de close ( ) functie Sluit de ResultSet object , rs , uit de bovenstaande voorbeelden : . . RS.Close ( ) ;
|