直到今天,我在处理查询结果时正在使用ResultSet
。但是今天我读了一些关于RowSet
和CachedRowset
的内容,我意识到它们可以更好地满足我的目的。虽然在我阅读的所有示例中RowSet
和CachedRowSet
被称为对象,但当我在我的代码中自己尝试时,我意识到这些是接口,在示例中他们使用了这些接口的一些实现。
现在我的问题是我在哪里找到这些实现,是否有正式的东西?
我是否需要下载它们或者它们是否随JDK一起提供?
答案 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)
答案 2 :(得分:0)
它随JDK一起提供。
在JDK 10中,罐子是: jdk-10.0.2 / lib / jrt-fs.jar
罐子里的包/类是: javax.sql.RowSet.class
丹尼尔·皮涅罗
danielpm1982@gmail.com
答案 3 :(得分:0)
在Eclipse Java构建路径中添加rt.jar。然后,您将看到所有实现类。另外,您可以从Eclipse中删除限制,该限制不允许从jdk访问rt.jar。 为我工作。我正在使用jdk1.6和Eclipse Luna。