RowSet、CachedRowSet 等的实现

2022-09-03 13:57:18

直到今天,我一直在处理查询结果。但是今天我读了一些关于RowSetCachedRowset的文章,我意识到它们可以更好地为我的目的服务。虽然在我读到的所有示例中,它们都被称为对象,但当我在代码中自己尝试时,我意识到这些是接口,并且在示例中它们使用了这些接口的一些实现。ResultSetRowSetCachedRowSet

现在我的问题是,在哪里可以找到这些实现,是否有官方的东西?

我需要下载它们还是它们随 JDK 一起提供?


答案 1

这些实现是特定于 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中,你可以通过工厂获得它们,这样你就不会依赖于底层的JRE实现,并且可以在必要时微调所选的实现:javax.sql.rowset

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

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

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

另请参阅:


答案 2

和 由 JDBC 驱动程序实现。RowSetCachedRowSet

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


推荐