1

我知道可以使用传递给其构造函数的 Connection 对象来创建 JDBC RowSet 实例,例如:

Connection con = MyDAO.getConnection();
JdbcRowSet jrs = new JdbcRowSetImpl(con);

两个问题:

  • 每次我构建包含任何使用 JdbcRowSetImpl 的项目时,我的 Java SE 7 都会抱怨。它说 JdbcRowSetImpl 是供应商特定的实现,它可能会从 JDK 的未来版本中删除。我觉得这很奇怪,因为 Java 教程继续在其 JDBC 部分中使用 JdbcRowSetImpl。Oracle 是否真的打算将工厂 RowSet 实现逐步淘汰 JDK?如果没有,有没有办法停止警告信息?

这是警告之一。当我尝试在代码中使用 JdbcRowSet 构造函数或尝试导入包时会发生这种情况

C:\Users\Ribose\Documents\NetBeansProjects\CensusAssistant\src\org\kls\md\censusassistant\db\DB.java:170:
 warning: JdbcRowSetImpl is internal proprietary API and may be removed in a future release
            jrs = new JdbcRowSetImpl(con);

我正在使用 NetBeans IDE 7.3 进行构建。RDBMS 是 HSQLDB 2.2.9。我有最新的 JDK SE 7。

  • 假设我已经有一个 JdbcRowSet 实例。虽然它没有连接,但我已经有一个 Connection 对象,但无法访问身份验证凭据,即我有该对象,但不需要 user_id 或密码来建立新的 Connection。

我可以将现有的 Connection 对象与现有的 JdbcRowSet 实例一起使用吗?我发现的唯一一件事是 JdbcRowSetImpl 的构造函数可以采用 Connection 对象,但我想使用 Connection 而不必构造新的 RowSet 对象。这可能吗?

4

1 回答 1

5

该类com.sun.rowset.JdbcRowSetImpl是 JDBC 接口的 Sun 特定实现,在不存在其他提供程序实现的情况下用作默认值。该类实际上自 JDK 1.2 以来就已存在,因此您可以肯定地说它会继续存在,但不能保证。通常所有包都是这种情况com.sun.*——它们代表不应直接引用或实例化的内部实现。

使用 Sun 的专有 Java 类是一种不好的做法吗?

话虽如此,与其他动态库 [SAX、DOM、JAXB 等] 不同,在不创建提供程序特定实例的情况下实例化 JDBC 行集没有真正好的方法,直到 Java 7,您现在可以使用工厂来创建提供程序特定实例,在您的代码中没有显式绑定:

final JDBCRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();

此代码扫描适当的提供者的类路径,并首先实例化一个 RowSetFactory,然后是一个 JDBCRowSet,使用找到的提供者类(请注意,如果没有找到其他提供者,它将回退到默认的 Sun 实现)。从 Java 7 开始,这是创建 JDBC 行集的首选方式。

我可以将现有的 Connection 对象与现有的 JdbcRowSet 实例一起使用吗?

Not without avoiding the internal proprietary API message no. As I said, the JDBCRowSetImpl class in all likeliness will continue to remain around. Infact the Java 7 documentation pretty much alludes as much:

The reference implementation of the JdbcRowSet interface, JdbcRowSetImpl, provides an implementation of the default constructor. A new instance is initialized with default values, which can be set with new values as needed

So if your willing to ignore the compiler warnings, you can use the default implementation to create a row set with an existing connection.

于 2013-04-08T00:16:35.540 回答