Implementations of RowSet, CachedRowSet etc

2019-01-17 16:31发布

Until today I was working with ResultSet when handling results from queries. But today I read a little about RowSet and CachedRowset and I realized they can serve my purposes better. While in all the examples I read where RowSet and CachedRowSet were referred to as object, when I tried it myself in my code I realized those are interfaces and in the examples they use some implementation of those interfaces.

Now my question is where do I find those implementations, and is there something official?

Do I need to download them or do they come with the JDK?

3条回答
地球回转人心会变
2楼-- · 2019-01-17 17:20

It comes with the JDK.

In JDK 10, the jar is: jdk-10.0.2/lib/jrt-fs.jar

And the package/class inside the jar is: javax.sql.RowSet.class

Daniel Pinheiro

danielpm1982@gmail.com

enter image description here

enter image description here

查看更多
beautiful°
3楼-- · 2019-01-17 17:21

The RowSet and CachedRowSet are implemented by the JDBC drivers.

Your database provider delivers the drivers e.g. Oracle or MySql. However those drivers only make sense in conjunction with an actual database.

查看更多
爱情/是我丢掉的垃圾
4楼-- · 2019-01-17 17:23

The implementations are JRE specific. Oracle (Sun) JRE comes with a bunch of implementations:

  • com.sun.rowset.JdbcRowSetImpl
  • com.sun.rowset.CachedRowSetImpl
  • com.sun.rowset.WebRowSetImpl
  • com.sun.rowset.FilteredRowSetImpl
  • com.sun.rowset.JoinRowSetImpl

In Java 1.6 and before, you'd need to construct them yourself:

JdbcRowSet rowSet = new JdbcRowSetImpl();
rowSet.setDataSourceName("jdbc/dbname");
// Or
rowSet.setUrl("jdbc:vendor://host:port/dbname");
rowSet.setUsername("username");
rowSet.setPassword("password");

rowSet.setCommand("SELECT id, name, value FROM tbl");
rowSet.execute();

while (rowSet.next()) {
    // ...
}

In Java 1.7 you can get them by a javax.sql.rowset factory so that you're not dependent of underlying JRE implementation and that you can finetune the implementation of choice if necessary:

RowSetFactory rowSetFactory = RowSetProvider.newFactory();
JdbcRowSet rowSet = rowSetFactory.createJdbcRowSet();
// ...

It only doesn't provide a possibility to pass a ResultSet on construction. Those implementations doesn't ship with the average JDBC driver (at least, MySQL and PostgreSQL have none). It's basically an extra (optional) layer over JDBC API as the package name prefix javax hints.

Note that if you get that far by looking into rowsets, then you might want to consider to look into an ORM instead, such as Hibernate or JPA. They provide first/second level cache possibilities.

See also:

查看更多
登录 后发表回答