Uvod u JDBC RowSet sučelje u Javi

Java Top

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

U ovom članku pregledavamo JDBC RowSet sučelje. JDBC RowSet objekt sadrži tabelarne podatke u stilu koji ga čini prilagodljivijim i jednostavnijim za upotrebu od skupa rezultata.

Oracle je definirao pet RowSet sučelja za najčešće upotrebe a Redak:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

U ovom uputstvu pregledat ćemo kako ih koristiti RowSet sučelja.

2. JdbcRowSet

Počnimo s JdbcRowSet - jednostavno ćemo ga stvoriti dodavanjem a Veza prigovoriti na JdbcRowSetImpl:

JdbcRowSet jdbcRS = novi JdbcRowSetImpl (conn); jdbcRS.setType (ResultSet.TYPE_SCROLL_INSENSITIVE); Niz sql = "SELECT * FROM customers"; jdbcRS.setCommand (sql); jdbcRS.execute (); jdbcRS.addRowSetListener (novi ExampleListener ()); while (jdbcRS.next ()) {// svaki poziv na sljedeći, generira kursorMoved događaj System.out.println ("id =" + jdbcRS.getString (1)); System.out.println ("name =" + jdbcRS.getString (2)); }

U gornjem primjeru, jdbcRs nije sadržavao podatke sve dok metodom nismo definirali SQL izraz setCommand a zatim pokrenuo metodu izvršiti.

Također primijetite kako smo, kako bismo izvršili rukovanje događajima, dodali a RowSetListener u JdbcRowSet.

JdbcRowSet je drugačija od ostale četiri RowSet implementacije - jer uvijek je povezan s bazom podataka i zbog toga je najsličniji Postavi rezultat objekt.

3. CachedRowSet

A CachedRowSet objekt je jedinstven jer može raditi bez povezivanja s izvorom podataka. To nazivamo „nepovezanim RowSet objekt".

CachedRowSet dobiva svoje ime zbog činjenice da svoje podatke sprema u memoriju kako bi mogao raditi s vlastitim podacima umjesto s podacima pohranjenim u bazi podataka.

Kao CachedRowSet sučelje je super sučelje za sve nepovezane RowSet objekte, kod koji pregledamo u nastavku također je primjenjiv na a WebRowSet, JoinRowSet, ili FilteredRowSet jednako dobro:

CachedRowSet crs = novi CachedRowSetImpl (); crs.setUsername (korisničko ime); crs.setPassword (lozinka); crs.setUrl (url); crs.setCommand (sql); crs.execute (); crs.addRowSetListener (novi ExampleListener ()); while (crs.next ()) {if (crs.getInt ("id") == 1) {System.out.println ("CRS je pronašao kupca1 i uklonit će zapis."); crs.deleteRow (); pauza; }}

4. WebRowSet

Dalje, pogledajmo WebRowSet.

Ovo je također jedinstveno jer, osim što nudi mogućnosti a CachedRowSet objekt, može se zapisati u XML dokumentt, a može i čitati taj XML dokument kako bi se pretvorio natrag u WebRowSet:

WebRowSet wrs = novi WebRowSetImpl (); wrs.setUsername (korisničko ime); wrs.setPassword (lozinka); wrs.setUrl (url); wrs.setCommand (sql); wrs.execute (); FileOutputStream ostream = novi FileOutputStream ("kupci.xml"); wrs.writeXml (ostream);

Koristiti writeXml metodom zapisujemo trenutno stanje a WebRowSet prigovor XML dokumentu.

Prolazeći writeXml metoda an Izlazni tok objekt, umjesto znakova pišemo u bajtovima, što može biti vrlo korisno za obradu svih oblika podataka.

5. JoinRowSet

JoinRowSet omogućuje nam stvaranje SQL-a PRIDRUŽITI između RowSet objekti kad su ti u memoriji. To je značajno jer nam štedi općenite potrebe stvaranja jedne ili više veza:

CachedRowSetImpl kupci = novi CachedRowSetImpl (); // konfiguracija postavki za CachedRowSet CachedRowSetImpl suradnici = novi CachedRowSetImpl (); // konfiguracija postavki za ovaj CachedRowSet JoinRowSet jrs = novi JoinRowSetImpl (); jrs.addRowSet (kupci, ID); jrs.addRowSet (suradnici, ID);

Jer svaki RowSet objekt dodan u JoinRowSet objekt treba stupac podudaranja, stupac na kojem je SQL PRIDRUŽITI temelji se, preciziramo "iskaznica" u addRowSet metoda.

Imajte na umu da smo, umjesto da koristimo naziv stupca, mogli koristiti i broj stupca.

6. FilteredRowSet

Napokon, FilteredRowSetomogućuje nam smanjenje broja redaka koji su vidljivi u Postavi red objekt tako da možemo raditi samo s podacima koji su relevantni za ono što radimo.

Odlučujemo kako želimo "filtrirati" podatke pomoću implementacije Predikat sučelje:

javna klasa FilterExample implementira Predicate {private Pattern pattern; javni FilterExample (niz regexQuery) {if (regexQuery! = null &&! regexQuery.isEmpty ()) {pattern = Pattern.compile (regexQuery); }} javna logička procjena (RowSet rs) {try {if (! rs.isAfterLast ()) {String name = rs.getString ("name"); System.out.println (String.format ("Traženje uzorka '% s' u% s", pattern.toString (), ime)); Podudaranje podudaranja = pattern.matcher (ime); vratiti matcher.matches (); } else return false; } catch (Iznimka e) {e.printStackTrace (); return false; }} // metode za rukovanje pogreškama}

Sada taj filter primjenjujemo na FilteredRowSet objekt:

RowSetFactory rsf = RowSetProvider.newFactory (); FilteredRowSet frs = rsf.createFilteredRowSet (); frs.setCommand ("odaberi * od kupaca"); frs.execute (conn); frs.setFilter (novi FilterExample ("^ [A-C]. *")); RezultatSetMetaData 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. Zaključak

Ovaj je brzi vodič obradio pet standardnih implementacija RowSet sučelje dostupno u JDK.

Razgovarali smo o konfiguraciji svake implementacije i spomenuli razlike između njih.

Kao što smo istakli, samo jedan od Postavi red implementacije je povezano RowSet objekt - JdbcRowSet. Preostala četiri su isključena RowSet predmeta.

I kao i uvijek, puni kod za ovaj članak nalazi se na Githubu.

Dno Java

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

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