Pengantar Antarmuka RowSet JDBC di Java

Java Top

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya

1. Ikhtisar

Pada artikel ini, kami meninjau antarmuka JDBC RowSet . Objek RowSet JDBC menyimpan data tabel dengan gaya yang membuatnya lebih mudah beradaptasi dan lebih sederhana untuk digunakan daripada kumpulan hasil.

Oracle telah menetapkan lima antarmuka RowSet untuk penggunaan RowSet yang paling sering :

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

Dalam tutorial ini, kami akan meninjau cara menggunakan antarmuka RowSet ini .

2. JdbcRowSet

Mari kita mulai dengan JdbcRowSet - kita hanya akan membuatnya dengan meneruskan objek Connection ke JdbcRowSetImpl :

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)); }

Dalam contoh di atas, jdbcRs berisi data sampai kita mendefinisikan pernyataan SQL dengan metode setCommand dan kemudian berlari metode mengeksekusi .

Perhatikan juga bagaimana, untuk melakukan penanganan event, kita menambahkan RowSetListener ke dalam JdbcRowSet.

JdbcRowSet berbeda dari empat implementasi RowSet lainnya - karena JdbcRowSet selalu terhubung ke database dan karenanya paling mirip dengan objek ResultSet .

3. CachedRowSet

Sebuah CachedRowSet objek adalah unik karena dapat beroperasi tanpa terhubung ke sumber data. Kami menyebutnya sebagai " objek RowSet terputus ".

CachedRowSet mendapatkan namanya karena dia menyimpan datanya dalam memori sehingga dapat beroperasi pada datanya sendiri daripada data yang disimpan dalam database.

Karena antarmuka CachedRowSet adalah antarmuka super untuk semua objek RowSet yang terputus , kode yang kami ulas di bawah ini juga berlaku untuk WebRowSet , JoinRowSet , atau FilteredRowSe t juga:

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

Selanjutnya, mari kita lihat WebRowSet .

Ini juga unik karena, selain menawarkan kapabilitas objek CachedRowSet , ia dapat menulis dirinya sendiri ke dokumen XML dan juga dapat membaca dokumen XML itu untuk mengubahnya kembali menjadi WebRowSet :

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);

Dengan menggunakan metode writeXml , kami menulis status saat ini dari objek WebRowSet ke dokumen XML.

Dengan meneruskan metode writeXml objek OutputStream , kita menulis dalam byte, bukan karakter, yang bisa sangat membantu untuk menangani semua bentuk data.

5. JoinRowSet

JoinRowSet memungkinkan kita membuat SQL JOIN antara objek RowSet saat ini ada di memori. Ini penting karena kami menghemat biaya karena harus membuat satu atau beberapa koneksi:

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);

Karena setiap objek RowSet yang ditambahkan ke objek JoinRowSet membutuhkan kolom yang cocok, kolom yang menjadi dasar SQL JOIN , kami menetapkan "id" dalam metode addRowSet .

Perhatikan bahwa, daripada menggunakan nama kolom, kita juga bisa menggunakan nomor kolom.

6. FilteredRowSet

Finally, the FilteredRowSetlets us cut down the number of rows that are visible in a RowSet object so that we can work with only the data that is relevant to what we are doing.

We decide how we want to “filter” the data using an implementation of the Predicate interface:

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 }

Now we apply that filter to a FilteredRowSet object:

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. Conclusion

This quick tutorial covered the five standard implementations of the RowSet interface available in the JDK.

We discussed the configuration of each implementation and mentioned the differences between them.

Seperti yang kami tunjukkan, hanya satu dari implementasi RowSet yang merupakan objek RowSet yang terhubung - JdbcRowSet . Empat lainnya adalah objek RowSet yang terputus .

Dan, seperti biasa, kode lengkap untuk artikel ini dapat ditemukan di Github.

Jawa bawah

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya