Java Blog From WeiChunHua

          Java

          常用鏈接

          統(tǒng)計

          develop

          news

          最新評論

          ResultSet大全

          開發(fā)的朋友,在操作數(shù)據(jù)庫的時候,相信絕大部分人都用過它。但它不僅僅就是一個結(jié)果集的純載體,僅僅只有存儲的功能。下面就簡略說一下它的功能。
            
             結(jié)果集大體上可以分為四類,它們各有特點,基本上都和Statement語句的創(chuàng)建方式有關。
             1、基本型(最基本,用得最廣泛)
             創(chuàng)建方式:無參數(shù)創(chuàng)建型
             Statement st = conn.CreateStatement
             ResultSet rs = Statement.excuteQuery(sqlStr);
             特點:這種最簡單,沒有特別的功能(不支持滾動、更新等等),只能用next()逐個單方向去讀取數(shù)據(jù)。
            
             2、滾動型
             創(chuàng)建方式:參數(shù)創(chuàng)建型
             Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
             ResultSet rs = st.executeQuery(sqlStr)
             參數(shù):
             resultSetType是設置ResultSet對象的類型可滾動
             resultSetConcurency是設置ResultSet對象能夠修改的
             具體的參數(shù)值見ResultSet.
            
             特點:(和具體參數(shù)的設置有關。)這種類型支持滾動獲取記錄,可以向前向后操作,類似于分頁功能的操作方式。如支持:next()、previous()、first()、absolute(int n)等等。
            
            
             3、更新型
             創(chuàng)建方式:(和2一樣,不過參數(shù)選取不同)
             Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)
            
             特點:可以完成對數(shù)據(jù)庫的更新操作。更新的方法是,把ResultSet的游標移動到你要更新的行,然后調(diào)用updateXXX(),再用updateRow()完成對數(shù)據(jù)庫的寫入。
            
             限制/要求:(1)對單表操作。(2)不包含join或者group by子句。
            
             4、保持型
             創(chuàng)建方式:
             Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)
             ResultSet rs = st.excuteQuery(sqlStr);
            
             參數(shù):只介紹第三個resultsetSetHoldability,表示在結(jié)果集提交后結(jié)果集是否打開,其值為
             ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交時,不關閉數(shù)據(jù)庫。
             ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交時ResultSet關閉
            
             特點:一般情況下,在使用Statement執(zhí)行完一個查詢,又去執(zhí)行另一個查詢的時候,第一個查詢的結(jié)果集就會被關閉。該方式可以自由設定是否關閉結(jié)果集。
             限制/要求:(1)只是在JDBC3.0的驅(qū)動下才能成立。

          可更新的結(jié)果集:

          更新一行:

                               

          UpdateXXX()è cancelRowUpdates()èupdateRow()èrowUpdated()。

          UpadateXXX()方法只能修改當前行的數(shù)據(jù),并不能修改數(shù)據(jù)庫中的數(shù)據(jù),所以在調(diào)用updateXXX()后,還要調(diào)用updateRow()方法,用當前行中的新數(shù)據(jù)更新數(shù)據(jù)庫。

          CancelRowUpdates()方法用來放棄對當前行的修改,注意,要讓這個方法有效,必須在調(diào)用updteRow()方法之前調(diào)用它。

          rowUpdated()方法來判斷當前行是否被更新。

          插入行:

          moveToInsertRow()方法移動游標到插入行,插入行是一個與可更新的結(jié)果集相聯(lián)系的特殊的緩存行。

          moveToInsertRow()èupdateXXX()ègetXXX()èinsertRow()èrowInserted()

          insertRow()將新行傳遞給數(shù)據(jù)庫,從而在新數(shù)據(jù)庫中真正插入一行數(shù)據(jù)

          rowInserted()方法來判斷當前行是否是插入行。

          刪除一行:

          deletRow()從結(jié)果集中和數(shù)據(jù)庫中刪除一行,當游標指向插入行的時候,不能調(diào)用這個方法。一個被刪除的行可能在結(jié)果集中留下一個空的位置,可以調(diào)用 rowDeleted()方法來判斷一行是否被刪除。

          可更新結(jié)果集的使用必須滿足下面3個條件:

          1, 只能是針對數(shù)據(jù)庫中單張表單的查詢

          2, 查詢語句中不能包含任何的join操作。

          3, 查詢操作的表中必須有主鍵,而且在查詢的結(jié)果集中必須包含作為主鍵的字段。

          結(jié)果集中執(zhí)行插入操作,還應該滿足下面兩個條件

          1, 查詢操作必須選擇數(shù)據(jù)庫表中所有不能為空的列

          2, 查詢操作必須選擇所有沒有默認值的列。

          判斷ResultSet是否為空

          ResultSet rs=stmt.executeQuery(sql);
          rs == null;
          rs.size()這個方法沒有的
          rs為ResultSet的引用,即使結(jié)果集里有0條記錄,rs也不為空,所以用rs == null來判斷結(jié)果集里是否有0條記錄是錯誤的,而要用
          rs.getRow(); 為0則表示沒有記錄--使用的時候也有問題
          使用rs.next()是否為true來判斷,會使游標前移一位,可能丟掉一條記錄,不合適
          boolean hasRows = false;

          下面的方法較合適
          while (rs.next()){
          hasRows = true;
          //Do your stuff
          }

          if (!hasRows ){
          //Empty result set
          }

          //You dont have to test for null result set

          posted on 2008-06-30 11:06 sunny spring 閱讀(987) 評論(0)  編輯  收藏 所屬分類: javaee

          主站蜘蛛池模板: 诏安县| 博乐市| 耿马| 富蕴县| 饶河县| 钦州市| 泸溪县| 遵义市| 比如县| 东丰县| 上虞市| 锡林郭勒盟| 拜城县| 西畴县| 宜川县| 安乡县| 安徽省| 临江市| 永靖县| 封开县| 社旗县| 樟树市| 三江| 会东县| 宁波市| 长乐市| 科技| 儋州市| 句容市| 加查县| 黔西| 山东| 丽水市| 南召县| 洛浦县| 都匀市| 光山县| 三门峡市| 南木林县| 开江县| 衡东县|