Inleiding tot de JDBC RowSet-interface in Java

Java Top

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS

1. Overzicht

In dit artikel bespreken we de JDBC RowSet koppel. Een JDBC RowSet object bevat tabelgegevens in een stijl die het aanpasbaarder en eenvoudiger te gebruiken maakt dan een resultatenset.

Oracle heeft er vijf gedefinieerd RowSet interfaces voor het meest voorkomende gebruik van een RowSet:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

In deze zelfstudie bekijken we hoe u deze kunt gebruiken RowSet interfaces.

2. JdbcRowSet

Laten we beginnen met de JdbcRowSet - we maken er eenvoudig een door een Verbinding bezwaar maken tegen de JdbcRowSetImpl:

JdbcRowSet jdbcRS = nieuwe JdbcRowSetImpl (conn); jdbcRS.setType (ResultSet.TYPE_SCROLL_INSENSITIVE); String sql = "SELECTEER * VAN klanten"; jdbcRS.setCommand (sql); jdbcRS.execute (); jdbcRS.addRowSetListener (nieuwe ExampleListener ()); while (jdbcRS.next ()) {// elke aanroep naar de volgende, genereert een cursorMoved-gebeurtenis System.out.println ("id =" + jdbcRS.getString (1)); System.out.println ("name =" + jdbcRS.getString (2)); }

In het bovenstaande voorbeeld jdbcRs bevatte geen gegevens totdat we de SQL-instructie met de methode definieerden setCommand en voerde vervolgens de methode uit uitvoeren.

Merk ook op hoe we, om gebeurtenisafhandeling uit te voeren, een RowSetListener in de JdbcRowSet.

JdbcRowSet is anders dan de andere vier RowSet implementaties - omdat het is altijd verbonden met de database en daarom lijkt het het meest op de ResultSet voorwerp.

3. CachedRowSet

EEN CachedRowSet object is uniek omdat het kan werken zonder verbonden te zijn met zijn gegevensbron. We noemen dit een 'verbroken verbinding' RowSet voorwerp".

CachedRowSet dankt zijn naam aan het feit dat het zijn gegevens in het geheugen opslaat, zodat het op zijn eigen gegevens kan werken in plaats van de gegevens die in een database zijn opgeslagen.

Net zo CachedRowSet interface is de superinterface voor alle niet-verbonden RowSet-objecten, is de onderstaande code ook van toepassing op een WebRowSet, JoinRowSet, of FilteredRowSet net zo goed:

CachedRowSet crs = nieuwe CachedRowSetImpl (); crs.setUsername (gebruikersnaam); crs.setPassword (wachtwoord); crs.setUrl (url); crs.setCommand (sql); crs.execute (); crs.addRowSetListener (nieuwe ExampleListener ()); while (crs.next ()) {if (crs.getInt ("id") == 1) {System.out.println ("CRS heeft klant1 gevonden en zal het record verwijderen."); crs.deleteRow (); breken; }}

4. WebRowSet

Laten we vervolgens eens kijken naar het WebRowSet.

Dit is ook uniek omdat, naast het bieden van de mogelijkheden van een CachedRowSet voorwerp, het kan zichzelf naar een XML-document schrijvent en kan dat XML-document ook lezen om zichzelf terug te converteren naar een WebRowSet:

WebRowSet wrs = nieuwe WebRowSetImpl (); wrs.setUsername (gebruikersnaam); wrs.setPassword (wachtwoord); wrs.setUrl (url); wrs.setCommand (sql); wrs.execute (); FileOutputStream ostream = nieuwe FileOutputStream ("customers.xml"); wrs.writeXml (ostream);

De ... gebruiken writeXml methode, schrijven we de huidige staat van een WebRowSet bezwaar maken tegen een XML-document.

Door het writeXml methode een OutputStream object, schrijven we in bytes in plaats van tekens, wat erg handig kan zijn om alle vormen van gegevens te verwerken.

5. JoinRowSet

JoinRowSet laat ons een SQL maken WORD LID tussen RowSet objecten als deze in het geheugen zijn. Dit is belangrijk omdat het ons de overhead bespaart van het maken van een of meer verbindingen:

CachedRowSetImpl klanten = nieuwe CachedRowSetImpl (); // configuratie van instellingen voor CachedRowSet CachedRowSetImpl-medewerkers = nieuwe CachedRowSetImpl (); // configuratie van instellingen voor deze CachedRowSet JoinRowSet jrs = nieuwe JoinRowSetImpl (); jrs.addRowSet (klanten, ID); jrs.addRowSet (medewerkers, ID);

Omdat elk RowSet object toegevoegd aan een JoinRowSet object heeft een matchkolom nodig, de kolom waarop de SQL WORD LID is gebaseerd, specificeren we "ID kaart" in de addRowSet methode.

Merk op dat we, in plaats van de kolomnaam te gebruiken, ook het kolomnummer hadden kunnen gebruiken.

6. FilteredRowSet

eindelijk, de FilteredRowSetlaat ons het aantal rijen dat zichtbaar is, verminderen in een RowSet object zodat we kunnen werken met alleen de gegevens die relevant zijn voor wat we doen.

We beslissen hoe we de gegevens willen "filteren" met behulp van een implementatie van de Predikaat koppel:

openbare klasse FilterExample implementeert Predicaat {privé patroonpatroon; openbaar FilterExample (String regexQuery) {if (regexQuery! = null &&! regexQuery.isEmpty ()) {pattern = Pattern.compile (regexQuery); }} openbare booleaanse evaluatie (RowSet rs) {probeer {if (! rs.isAfterLast ()) {String name = rs.getString ("name"); System.out.println (String.format ("Zoeken naar patroon '% s' in% s", pattern.toString (), naam)); Matcher matcher = pattern.matcher (naam); retourneer matcher.matches (); } else retourneert false; } catch (uitzondering e) {e.printStackTrace (); teruggeven false; }} // methoden voor het afhandelen van fouten}

Nu passen we dat filter toe op een FilteredRowSet voorwerp:

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

7. Conclusie

Deze korte tutorial behandelde de vijf standaardimplementaties van het RowSet interface beschikbaar in de JDK.

We bespraken de configuratie van elke implementatie en noemden de verschillen daartussen.

Zoals we hebben opgemerkt, is slechts een van de RowSet implementaties is een verbonden RowSet object - het JdbcRowSet. De andere vier zijn losgekoppeld RowSet voorwerpen.

En, zoals altijd, is de volledige code voor dit artikel te vinden op Github.

Java onderkant

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS

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