Uvod u JDBC RowSet sučelje u Javi
Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:
>> PROVJERITE TEČAJ1. 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