Introduksjon til JDBC RowSet Interface i Java

Java Top

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Oversikt

I denne artikkelen gjennomgår vi JDBC RowSet grensesnitt. En JDBC RowSet objektet inneholder tabelldata i en stil som gjør det mer tilpasningsdyktig og enklere å bruke enn et resultatsett.

Oracle har definert fem RowSet grensesnitt for den hyppigste bruken av a Radsett:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

I denne opplæringen vil vi gjennomgå hvordan du bruker disse RowSet grensesnitt.

2. JdbcRowSet

La oss starte med JdbcRowSet - vi oppretter bare en ved å sende en Forbindelse motsette seg JdbcRowSetImpl:

JdbcRowSet jdbcRS = ny JdbcRowSetImpl (konn); jdbcRS.setType (ResultSet.TYPE_SCROLL_INSENSITIVE); String sql = "VELG * FRA kunder"; jdbcRS.setCommand (sql); jdbcRS.execute (); jdbcRS.addRowSetListener (nytt eksempelListener ()); mens (jdbcRS.next ()) {// hver samtale til neste, genererer en cursorMoved hendelse System.out.println ("id =" + jdbcRS.getString (1)); System.out.println ("name =" + jdbcRS.getString (2)); }

I eksemplet ovenfor, jdbcRs inneholdt ingen data før vi definerte SQL-setningen med metoden setCommand og kjørte deretter metoden henrette.

Legg også merke til hvordan, for å utføre hendelsesbehandling, la vi til en RowSetListener inn i det JdbcRowSet.

JdbcRowSet er annerledes enn de andre fire RowSet implementeringer - fordi den er alltid koblet til databasen og på grunn av dette ligner det mest på ResultatSett gjenstand.

3. CachedRowSet

EN CachedRowSet objektet er unikt fordi det kan fungere uten å være koblet til datakilden. Vi kaller dette en "frakoblet RowSet gjenstand".

CachedRowSet får navnet sitt på grunn av at det cacher dataene i minnet slik at det kan operere på sine egne data i stedet for dataene som er lagret i en database.

Som CachedRowSet grensesnittet er supergrensesnitt for alle frakoblede RowSet-objekter, koden vi gjennomgår nedenfor, gjelder også for a WebRowSet, JoinRowSet, eller FilteredRowSet like bra:

CachedRowSet crs = ny CachedRowSetImpl (); crs.setUsername (brukernavn); crs.setPassword (passord); crs.setUrl (url); crs.setCommand (sql); crs.execute (); crs.addRowSetListener (nytt eksempelListener ()); mens (crs.next ()) {if (crs.getInt ("id") == 1) {System.out.println ("CRS fant kunde1 og vil fjerne posten."); crs.deleteRow (); gå i stykker; }}

4. WebRowSet

La oss ta en titt på WebRowSet.

Dette er også unikt fordi, i tillegg til å tilby funksjonene til en CachedRowSet gjenstand, den kan skrive seg til en XML-dokumentasjont og kan også lese det XML-dokumentet for å konvertere seg selv tilbake til en WebRowSet:

WebRowSet wrs = ny WebRowSetImpl (); wrs.setUsername (brukernavn); wrs.setPassword (passord); wrs.setUrl (url); wrs.setCommand (sql); wrs.execute (); FileOutputStream ostream = ny FileOutputStream ("kunder.xml"); wrs.writeXml (ostream);

Bruker skrivXml metode, skriver vi den nåværende tilstanden til a WebRowSet motsette seg et XML-dokument.

Ved å passere skrivXml metode an OutputStream objekt, skriver vi i byte i stedet for tegn, noe som kan være ganske nyttig for å håndtere alle former for data.

5. JoinRowSet

JoinRowSet lar oss lage en SQL BLI MED mellom RowSet gjenstander når disse er i minnet. Dette er viktig fordi det sparer oss for å måtte opprette en eller flere forbindelser:

CachedRowSetImpl kunder = nye CachedRowSetImpl (); // konfigurasjon av innstillinger for CachedRowSet CachedRowSetImpl-tilknytninger = nye CachedRowSetImpl (); // konfigurasjon av innstillinger for denne CachedRowSet JoinRowSet jrs = new JoinRowSetImpl (); jrs.addRowSet (kunder, ID); jrs.addRowSet (tilknyttede selskaper, ID);

Fordi hver RowSet objekt lagt til en JoinRowSet objektet trenger en samsvarskolonne, kolonnen som SQL BLI MED er basert, spesifiserer vi “Id” i addRowSet metode.

Merk at, i stedet for å bruke kolonnenavnet, kunne vi også ha brukt kolonnenummeret.

6. FilteredRowSet

Til slutt, FilteredRowSetlar oss kutte ned antall rader som er synlige i en RowSet innvende slik at vi bare kan jobbe med dataene som er relevante for det vi gjør.

Vi bestemmer hvordan vi vil "filtrere" dataene ved hjelp av en implementering av Predikere grensesnitt:

offentlig klasse FilterExample implementerer Predikat {privat mønster mønster; public FilterExample (String regexQuery) {if (regexQuery! = null &&! regexQuery.isEmpty ()) {pattern = Pattern.compile (regexQuery); }} offentlig boolsk evaluering (RowSet rs) {prøv {if (! rs.isAfterLast ()) {String name = rs.getString ("name"); System.out.println (String.format ("Søker etter mønster '% s' i% s", pattern.toString (), navn)); Matcher matcher = mønster. Matcher (navn); retur matcher.matches (); } ellers returner falsk; } fange (Unntak e) {e.printStackTrace (); returner falsk; }} // metoder for håndtering av feil}

Nå bruker vi filteret på a FilteredRowSet gjenstand:

RowSetFactory rsf = RowSetProvider.newFactory (); FilteredRowSet frs = rsf.createFilteredRowSet (); frs.setCommand ("velg * fra kunder"); frs.execute (conn); frs.setFilter (nytt FilterExample ("^ [A-C]. *")); ResultSetMetaData rsmd = frs.getMetaData (); int columncount = rsmd.getColumnCount (); mens (frs.next ()) {for (int i = 1; i <= columncount; i ++) {System.out.println (rsmd.getColumnLabel (i) + "=" + frs.getObject (i) + "" ); }}

7. Konklusjon

Denne raske opplæringen dekket de fem standardimplementeringene av RowSet grensesnitt tilgjengelig i JDK.

Vi diskuterte konfigurasjonen av hver implementering og nevnte forskjellene mellom dem.

Som vi påpekte, var det bare en av RowSet implementeringer er en sammenhengende RowSet objekt - den JdbcRowSet. De fire andre er koblet fra RowSet gjenstander.

Og som alltid kan den fulle koden for denne artikkelen finnes på Github.

Java bunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

$config[zx-auto] not found$config[zx-overlay] not found