在java主要涉及到数据开发的过程中,我们会和数据库打交道很多,其中使用了数据集比如ResultSet和RowSet,经常使用两种,还有其它的一些,那么这两种的主要区别是什么呢?我们先来看它们引入的方式,ResultSet:import java.sql.ResultSet; RowSet: import javax.sql.RowSet; 典型的区别是引入的路径不一样:
java和javax都是Java的API(Application Programming Interface)包,java是核心包,javax的x是extension的意思,也就是扩展包。java类库是java发布之初就确定了的基础库,而javax类库则是在上面增加的一层东西,就是为了保持版本兼容要保存原来的,但有些东西有了更好的解决方案,所以,就加上些。
所以我们就可以知道ResultSet要比RowSet出现的早,就是java发布初期就存在的,我们查询API也可以看到RowSet是从version 1.4才有的,public interface RowSet extends ResultSet
RowSet
接口扩展了标准 java.sql.ResultSet
接口。RowSetMetaData
接口扩展了 java.sql.ResultSetMetaData
接口.
那么我们在使用的时候尽量使用扩展的RowSet就可以满足要求:
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,
那么OracleCachedRowSet就是Oracle对于CachedRowSet的扩展实现。
RowSetMetaData那么就是扩展了ResultSetMetaData, 顾名思义就是元数据,就是基础信息,比如列的数量,类型等,常用的比如需要得到列数目getColumnCount():
所以简单总结就是RowSet是对ResultSet的扩展,MetaData是元数据,CachedRowSet则是可以缓存不需要实时连接数据源的。