在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則是能夠緩存不須要實時鏈接數據源的。