1. 程式人生 > >java資料庫程式設計(10) 離線RowSet

java資料庫程式設計(10) 離線RowSet

  1. 使用離線的RowSet可以使得不用一直保持Connection連結,離線RowSet會直接將地城資料讀入到記憶體,封裝成RowSet物件,而RowSet物件可以直接當作Java  Bean來使用
  2. CachedRowSet是所有離線RowSet的父介面
  3. 程式執行前和程式執行後對資料庫進行查詢的結果如下
  4. import javax.sql.rowset.CachedRowSet;
    import javax.sql.rowset.RowSetFactory;
    import javax.sql.rowset.RowSetProvider;
    import java.io.FileInputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class CachedRowSetTest {
    //    常規操作,不解釋~~
        private static String driver;
        private static String url;
        private static String user;
        private static String pass;
    
        public void initParam(String fileName) throws Exception{
            Properties prop =  new Properties();
            prop.load(new FileInputStream(fileName));
            driver = prop.getProperty("driver");
            url  = prop.getProperty("url");
            user = prop.getProperty("user");
            pass = prop.getProperty("pass");
        }
    
        public CachedRowSet query(String sql) throws  Exception{
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, user, pass);
            Statement stmtm = conn.createStatement();
            ResultSet rs = stmtm.executeQuery(sql);
    
            RowSetFactory factory = RowSetProvider.newFactory();
    //        建立RowSetFactory物件
    
            CachedRowSet cachedRowSet = factory.createCachedRowSet();
    //        通過RowSetFactory物件創捷CacheRowSet物件
    
            cachedRowSet.populate(rs);
    //        將查詢的結果集封裝到CachedRowSet中
    
    //        關閉連線
            rs.close();
            stmtm.close();
            conn.close();
    
            return cachedRowSet;
    //        將封裝有結果集的CachedRowSet返回
        }
        public static void main(String args[]) throws  Exception{
            CachedRowSetTest ct = new CachedRowSetTest();
            ct.initParam("mysql.ini");
            CachedRowSet rs = ct.query("select * from students");
            rs.afterLast();
    
    //        對離線RowSet進行一些處理
            while (rs.previous()){
                System.out.println(rs.getString(1) + "\t" + rs.getString(2));
    
                if(rs.getString("Sname").equals("Smith")){
                    rs.updateString("Sno", "S4");
                    rs.updateRow();
                }
            }
    //        重新開啟資料庫連結,並且將修改過的結果集同步到資料庫中
            Connection conn = DriverManager.getConnection(url,user,pass);
            conn.setAutoCommit(false);
            rs.acceptChanges(conn);
        }
    }
    //執行程式,看到以下輸出結果
    //        S3	Tom
    //        S2	Marry
    //        S0	Smith