ResultSet,RowSet,OracleCachedRowSet和RowSetMetaData区别及联系

      在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则是可以缓存不需要实时连接数据源的。
原文地址:https://www.cnblogs.com/practice-h/p/9008361.html