【问题标题】:Implementations of RowSet, CachedRowSet etcRowSet、CachedRowSet 等的实现
【发布时间】:2012-01-03 06:53:42
【问题描述】:

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

现在我的问题是我在哪里可以找到这些实现,有什么官方的吗?

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

【问题讨论】:

标签: java jdbc resultset rowset cachedrowset


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    JDK 自带。

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

    jar 中的包/类是: javax.sql.RowSet.class

    丹尼尔·皮涅罗

    danielpm1982@gmail.com

    【讨论】:

      【解决方案3】:

      这些实现是特定于 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。它们提供一级/二级缓存的可能性。

      另见:

      【讨论】:

      • 感谢您的回答!我没有所有这些 Impl 类,我需要下载它们吗?如果我这样做,它会使事情变得有点复杂。我将在稍后的培训中学习 ORM,我刚刚偶然发现了 RowSet,我认为使用它比使用需要开放连接的 ResultSet 更好。
      • 它们存在于 JRE/JRK 中。也许您正在使用 IDE 并且它正在抑制受限 API 的导入?它可以在 IDE 的首选项中进行配置。
      • 我使用的是 Eclipse (Indigo),只能看到 com.sun.rowset.internal 和 com.sun.rowset.providers
      • 添加这一行:import com.sun.rowset.JdbcRowSetImpl; 警告/错误消息说什么?如果它出错,那么您可以通过将 Window > Preferences > Java > Errors/Warnings > Deprecated and restricted API > Forbidden reference 设置为 Ignore 或 Warning 而不是 错误.
      • 请注意,一些 JDBC 驱动程序也提供了 RowSet 的实现。
      【解决方案4】:

      RowSet 和 CachedRowSet 由 JDBC 驱动程序实现。

      您的数据库提供商提供驱动程序,例如Oracle 或 MySql。然而,这些驱动程序只有在与实际数据库结合使用时才有意义。

      【讨论】:

      • 我有 ojdbc14.jar,但它不包含包含 OracleCachedRowSet 和所有其他内容的 oracle.jdbc.rowset。它与版本或类似的东西有什么关系吗?
      • ojdbc14.jar 是一个 java 1.4 驱动程序。 CachedRowSet 是在 java 1.5 中引入的。您需要获取 JDBC 3.0 或更高版本的驱动程序。
      • 没错,JDBC 驱动程序供应商可能会提供 RowSet 实现。但是 Sun/Oracle 也发布了GNU General Public License version 2 下的实现源代码。
      • 在 JDBC 3、Java 1.4 中引入。我从未见过CachedRowSet 的供应商实现
      • 亲爱的投票者:请在投票的同时留下批评。在我看来,这个答案是正确、有效和有价值的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多