Introduktion til JDBC RowSet Interface i Java

Java Top

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

1. Oversigt

I denne artikel gennemgår vi JDBC Rækkesæt interface. En JDBC Rækkesæt objekt indeholder tabeldata i en stil, der gør det mere tilpasset og enklere at bruge end et resultatsæt.

Oracle har defineret fem Rækkesæt grænseflader til de mest hyppige anvendelser af en Række sæt:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

I denne vejledning gennemgår vi, hvordan du bruger disse Rækkesæt grænseflader.

2. JdbcRowSet

Lad os starte med JdbcRowSet - vi opretter simpelthen en ved at sende en Forbindelse modsætter sig JdbcRowSetImpl:

JdbcRowSet jdbcRS = ny JdbcRowSetImpl (conn); jdbcRS.setType (ResultSet.TYPE_SCROLL_INSENSITIVE); String sql = "VÆLG * FRA kunder"; jdbcRS.setCommand (sql); jdbcRS.execute (); jdbcRS.addRowSetListener (nyt eksempelListener ()); mens (jdbcRS.next ()) {// hvert opkald til næste, genererer en cursorMoved-begivenhed System.out.println ("id =" + jdbcRS.getString (1)); System.out.println ("navn =" + jdbcRS.getString (2)); }

I ovenstående eksempel jdbcRs indeholdt ingen data, før vi definerede SQL-sætningen med metoden setCommand og kørte derefter metoden udføre.

Bemærk også, hvordan vi for at udføre begivenhedshåndtering tilføjede en RowSetListener ind i JdbcRowSet.

JdbcRowSet er anderledes end de andre fire Rækkesæt implementeringer - fordi det er altid forbundet til databasen og på grund af dette ligner det mest ResultSet objekt.

3. CachedRowSet

EN CachedRowSet objektet er unikt, fordi det kan fungere uden at være forbundet til dets datakilde. Vi kalder dette en ”afbrudt forbindelse Rækkesæt objekt".

CachedRowSet får sit navn på grund af det faktum, at det cachelagrer sine data i hukommelsen, så det kan fungere på sine egne data i stedet for de data, der er gemt i en database.

Som CachedRowSet interface er super interface til alle frakoblede RowSet objekter, koden, vi gennemgår nedenfor, gælder også for en WebRowSet, JoinRowSet, eller FilteredRowSet lige så godt:

CachedRowSet crs = ny CachedRowSetImpl (); crs.setUsername (brugernavn); crs.setPassword (adgangskode); crs.setUrl (url); crs.setCommand (sql); crs.execute (); crs.addRowSetListener (nyt eksempelListener ()); mens (crs.next ()) {if (crs.getInt ("id") == 1) {System.out.println ("CRS fandt kunde1 og fjerner posten."); crs.deleteRow (); pause; }}

4. WebRowSet

Lad os derefter se på WebRowSet.

Dette er også unikt, foruden at tilbyde funktionerne i en CachedRowSet objekt, det kan skrive sig selv til et XML-dokumentt og kan også læse det XML-dokument for at konvertere sig selv tilbage til en WebRowSet:

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

Bruger skrivXml metode, skriver vi den aktuelle tilstand af a WebRowSet modsætter sig et XML-dokument.

Ved at passere skrivXml metode an OutputStream objekt, vi skriver i bytes i stedet for tegn, hvilket kan være meget nyttigt at håndtere alle former for data.

5. JoinRowSet

JoinRowSet lader os oprette en SQL TILSLUTTE mellem Rækkesæt objekter, når disse er i hukommelsen. Dette er vigtigt, fordi det sparer os for omkostningerne ved at skulle oprette en eller flere forbindelser:

CachedRowSetImpl kunder = nye CachedRowSetImpl (); // konfiguration af indstillinger for CachedRowSet CachedRowSetImpl associerede = nye CachedRowSetImpl (); // konfiguration af indstillinger for denne CachedRowSet JoinRowSet jrs = ny JoinRowSetImpl (); jrs.addRowSet (kunder, ID); jrs.addRowSet (tilknyttede, ID);

Fordi hver Rækkesæt objekt føjet til en JoinRowSet objekt har brug for en matchkolonne, den kolonne, hvor SQL TILSLUTTE er baseret, specificerer vi “Id” i addRowSet metode.

Bemærk, at i stedet for at bruge kolonnenavnet, kunne vi også have brugt kolonnenummeret.

6. FilteredRowSet

Endelig blev FilteredRowSetlader os skære ned i antallet af synlige rækker i en Rækkesæt gør indsigelse, så vi kun kan arbejde med de data, der er relevante for det, vi laver.

Vi beslutter, hvordan vi vil "filtrere" dataene ved hjælp af en implementering af Prædikat grænseflade:

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øger efter mønster '% s' i% s", pattern.toString (), navn)); Matcher matcher = mønster. Matcher (navn); returner matcher.matches (); } ellers returnere falsk; } fange (Undtagelse e) {e.printStackTrace (); returner falsk; }} // metoder til håndtering af fejl}

Nu anvender vi det filter på en FilteredRowSet objekt:

RowSetFactory rsf = RowSetProvider.newFactory (); FilteredRowSet frs = rsf.createFilteredRowSet (); frs.setCommand ("vælg * fra kunder"); frs.execute (conn); frs.setFilter (nyt Filtereksempel ("^ [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. Konklusion

Denne hurtige vejledning dækkede de fem standardimplementeringer af Rækkesæt interface tilgængelig i JDK.

Vi diskuterede konfigurationen af ​​hver implementering og nævnte forskellene mellem dem.

Som vi påpegede, kun en af Rækkesæt implementeringer er en forbindelse Rækkesæt objekt - den JdbcRowSet. De andre fire er afbrudt Rækkesæt genstande.

Og som altid kan den fulde kode til denne artikel findes på Github.

Java bund

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN