RowSet,CachedRowSet等的实现

时间:2011-11-21 19:36:20

标签: java jdbc resultset rowset cachedrowset

直到今天,我在处理查询结果时正在使用ResultSet。但是今天我读了一些关于RowSetCachedRowset的内容,我意识到它们可以更好地满足我的目的。虽然在我阅读的所有示例中RowSetCachedRowSet被称为对象,但当我在我的代码中自己尝试时,我意识到这些是接口,在示例中他们使用了这些接口的一些实现。

现在我的问题是我在哪里找到这些实现,是否有正式的东西?

我是否需要下载它们或者它们是否随JDK一起提供?

4 个答案:

答案 0 :(得分:19)

这些实现是特定于JRE的。 Oracle(Sun)JRE附带了许多实现:

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

在Java 1.6及之前,您需要自己构建它们:

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()) {
    // ...
}

在Java 1.7中,您可以通过javax.sql.rowset工厂获取它们,这样您就不会依赖于底层JRE实现,并且您可以在必要时微调选择的实现:

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

它不能提供在构造上传递ResultSet的可能性。这些实现不附带普通的JDBC驱动程序(至少MySQL和PostgreSQL没有)。它基本上是JDBC API上的一个额外(可选)层,因为包名称前缀javax提示。

请注意,如果您通过查看行集来实现这一目标,那么您可能需要考虑查看ORM,例如Hibernate或JPA。它们提供一级/二级缓存可能性。

另见:

答案 1 :(得分:0)

RowSetCachedRowSet由JDBC驱动程序实现。

您的数据库提供商提供驱动程序,例如OracleMySql。但是,这些驱动程序只与实际数据库结合才有意义。

答案 2 :(得分:0)

它随JDK一起提供。

在JDK 10中,罐子是: jdk-10.0.2 / lib / jrt-fs.jar

罐子里的包/类是: javax.sql.RowSet.class

丹尼尔·皮涅罗

danielpm1982@gmail.com

enter image description here

enter image description here

答案 3 :(得分:0)

在Eclipse Java构建路径中添加rt.jar。然后,您将看到所有实现类。另外,您可以从Eclipse中删除限制,该限制不允许从jdk访问rt.jar。 为我工作。我正在使用jdk1.6和Eclipse Luna。