在java主要涉及到数据开发的过程当中,咱们会和数据库打交道不少,其中使用了数据集好比ResultSet和RowSet,常常使用两种,还有其它的一些,那么这两种的主要区别是什么呢?咱们先来看它们引入的方式,ResultSet:import java.sql.ResultSet; RowSet: import javax.sql.RowSet; 典型的区别是引入的路径不同:java
java和javax都是Java的API(Application Programming Interface)包,java是核心包,javax的x是extension的意思,也就是扩展包。java类库是java发布之初就肯定了的基础库,而javax类库则是在上面增长的一层东西,就是为了保持版本兼容要保存原来的,但有些东西有了更好的解决方案,因此,就加上些。sql
因此咱们就能够知道ResultSet要比RowSet出现的早,就是java发布初期就存在的,咱们查询API也能够看到RowSet是从version 1.4才有的,public interface RowSet extends ResultSet数据库
RowSet
接口扩展了标准 java.sql.ResultSet
接口。RowSetMetaData
接口扩展了 java.sql.ResultSetMetaData
接口.缓存
那么咱们在使用的时候尽可能使用扩展的RowSet就能够知足要求:oracle
Connection dbconn = null; PreparedStatement psQuery = null; RowSet rsQuery = null; String sQuery = "select a,b from table"; try{ DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); dbconn = DriverManager.getConnection( "xxxx", "username", "ps"); dbconn.setAutoCommit(false); psQuery=dbconn.prepareStatement(sQuery); rsQuery = psQuery.executeQuery(); while (rsQuery.next()) { String name = rsQuery.getString("a"); logger.info("user name is: "+name); } } catch (SQLException e){ e.printStackTrace(); }
而CachedRowSet
对象是一个数据行的容器,可在内存中缓存其各行,这使得进行操做时无需老是链接到数据源,CachedRowSet
对象是一个非链接 rowset,这意味着它只会短暂地链接其数据源。在须要链接后及时断开数据源的情境下可使用缓存RowSet,也就是CachedRowSet,spa
那么OracleCachedRowSet就是Oracle对于CachedRowSet的扩展实现。code
RowSetMetaData那么就是扩展了ResultSetMetaData, 顾名思义就是元数据,就是基础信息,好比列的数量,类型等,经常使用的好比须要获得列数目getColumnCount():对象
因此简单总结就是RowSet是对ResultSet的扩展,MetaData是元数据,CachedRowSet则是能够缓存不须要实时链接数据源的。