ResultSet,RowSet,OracleCachedRowSet和RowSetMetaData區別及聯繫

      在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則是能夠緩存不須要實時鏈接數據源的。
相關文章
相關標籤/搜索