Einführung in die JDBC RowSet-Schnittstelle in Java

Java Top

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs

1. Übersicht

In diesem Artikel überprüfen wir die JDBC RowSet- Schnittstelle . Ein JDBC RowSet- Objekt enthält Tabellendaten in einem Stil, der anpassungsfähiger und einfacher zu verwenden ist als eine Ergebnismenge.

Oracle hat fünf RowSet- Schnittstellen für die häufigsten Verwendungen eines RowSet definiert:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

In diesem Tutorial erfahren Sie, wie Sie diese RowSet- Schnittstellen verwenden.

2. JdbcRowSet

Beginnen wir mit dem JdbcRowSet - wir erstellen einfach eines, indem wir ein Verbindungsobjekt an das JdbcRowSetImpl übergeben :

JdbcRowSet jdbcRS = new JdbcRowSetImpl(conn); jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE); String sql = "SELECT * FROM customers"; jdbcRS.setCommand(sql); jdbcRS.execute(); jdbcRS.addRowSetListener(new ExampleListener()); while (jdbcRS.next()) { // each call to next, generates a cursorMoved event System.out.println("id = " + jdbcRS.getString(1)); System.out.println("name = " + jdbcRS.getString(2)); }

Im obigen Beispiel enthielten jdbcRs keine Daten, bis wir die SQL-Anweisung mit der Methode setCommand definiert und dann die Methode execute ausgeführt haben .

Beachten Sie auch , dass wir zur Durchführung der Ereignisbehandlung dem JdbcRowSet einen RowSetListener hinzugefügt haben.

JdbcRowSet unterscheidet sich von den anderen vier RowSet- Implementierungen - da es immer mit der Datenbank verbunden ist und daher dem ResultSet- Objekt am ähnlichsten ist.

3. CachedRowSet

Ein CachedRowSet- Objekt ist eindeutig, da es ohne Verbindung zu seiner Datenquelle betrieben werden kann. Wir nennen dies ein "getrenntes RowSet- Objekt".

CachedRowSet erhält seinen Namen aufgrund der Tatsache, dass es seine Daten im Speicher zwischenspeichert, so dass es seine eigenen Daten anstelle der in einer Datenbank gespeicherten Daten verarbeiten kann.

Da die CachedRowSet- Schnittstelle die Super-Schnittstelle für alle getrennten RowSet-Objekte ist , gilt der unten beschriebene Code auch für WebRowSe t, JoinRowSet oder FilteredRowSe t:

CachedRowSet crs = new CachedRowSetImpl(); crs.setUsername(username); crs.setPassword(password); crs.setUrl(url); crs.setCommand(sql); crs.execute(); crs.addRowSetListener(new ExampleListener()); while (crs.next()) { if (crs.getInt("id") == 1) { System.out.println("CRS found customer1 and will remove the record."); crs.deleteRow(); break; } }

4. WebRowSet

Schauen wir uns als nächstes das WebRowSet an .

Dies ist auch deshalb einzigartig, weil es nicht nur die Funktionen eines CachedRowSet- Objekts bietet, sondern sich auch selbst in ein XML-Dokument schreiben und dieses XML-Dokument lesen kann, um sich selbst wieder in ein WebRowSet zu konvertieren :

WebRowSet wrs = new WebRowSetImpl(); wrs.setUsername(username); wrs.setPassword(password); wrs.setUrl(url); wrs.setCommand(sql); wrs.execute(); FileOutputStream ostream = new FileOutputStream("customers.xml"); wrs.writeXml(ostream);

Mit der writeXml- Methode schreiben wir den aktuellen Status eines WebRowSet- Objekts in ein XML-Dokument.

Indem wir der writeXml- Methode ein OutputStream- Objekt übergeben, schreiben wir in Bytes anstelle von Zeichen, was für die Verarbeitung aller Arten von Daten sehr hilfreich sein kann.

5. JoinRowSet

Mit JoinRowSet können wir einen SQL- JOIN zwischen RowSet- Objekten erstellen , wenn sich diese im Speicher befinden. Dies ist insofern von Bedeutung, als wir nicht mehr eine oder mehrere Verbindungen herstellen müssen:

CachedRowSetImpl customers = new CachedRowSetImpl(); // configuration of settings for CachedRowSet CachedRowSetImpl associates = new CachedRowSetImpl(); // configuration of settings for this CachedRowSet JoinRowSet jrs = new JoinRowSetImpl(); jrs.addRowSet(customers,ID); jrs.addRowSet(associates,ID);

Da jedes RowSet- Objekt, das einem JoinRowSet- Objekt hinzugefügt wird, eine Übereinstimmungsspalte benötigt, die Spalte, auf der SQL JOIN basiert, geben wir in der addRowSet- Methode "id" an .

Beachten Sie, dass wir anstelle des Spaltennamens auch die Spaltennummer verwenden könnten.

6. FilteredRowSet

Schließlich können wir mit FilteredRowSet die Anzahl der Zeilen reduzieren, die in einem RowSet- Objekt sichtbar sind, sodass wir nur mit den Daten arbeiten können, die für unsere Arbeit relevant sind.

Wir entscheiden, wie wir die Daten mithilfe einer Implementierung der Predicate- Schnittstelle „filtern“ möchten :

public class FilterExample implements Predicate { private Pattern pattern; public FilterExample(String regexQuery) { if (regexQuery != null && !regexQuery.isEmpty()) { pattern = Pattern.compile(regexQuery); } } public boolean evaluate(RowSet rs) { try { if (!rs.isAfterLast()) { String name = rs.getString("name"); System.out.println(String.format( "Searching for pattern '%s' in %s", pattern.toString(), name)); Matcher matcher = pattern.matcher(name); return matcher.matches(); } else return false; } catch (Exception e) { e.printStackTrace(); return false; } } // methods for handling errors }

Jetzt wenden wir diesen Filter auf ein FilteredRowSet- Objekt an:

RowSetFactory rsf = RowSetProvider.newFactory(); FilteredRowSet frs = rsf.createFilteredRowSet(); frs.setCommand("select * from customers"); frs.execute(conn); frs.setFilter(new 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. Fazit

In diesem kurzen Tutorial wurden die fünf Standardimplementierungen der im JDK verfügbaren RowSet- Schnittstelle behandelt.

Wir haben die Konfiguration jeder Implementierung besprochen und die Unterschiede zwischen ihnen erwähnt.

Wie bereits erwähnt, ist nur eine der RowSet- Implementierungen ein verbundenes RowSet- Objekt - das JdbcRowSet . Die anderen vier sind nicht verbundene RowSet- Objekte.

Und wie immer finden Sie den vollständigen Code für diesen Artikel auf Github.

Java unten

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs