<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java Blog From WeiChunHua

    Java

    常用鏈接

    統計

    develop

    news

    最新評論

    ResultSet大全

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

    可更新的結果集:

    更新一行:

                         

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

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

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

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

    插入行:

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

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

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

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

    刪除一行:

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

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

    1, 只能是針對數據庫中單張表單的查詢

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

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

    結果集中執行插入操作,還應該滿足下面兩個條件

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

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

    判斷ResultSet是否為空

    ResultSet rs=stmt.executeQuery(sql);
    rs == null;
    rs.size()這個方法沒有的
    rs為ResultSet的引用,即使結果集里有0條記錄,rs也不為空,所以用rs == null來判斷結果集里是否有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 閱讀(985) 評論(0)  編輯  收藏 所屬分類: javaee

    主站蜘蛛池模板: 亚洲色自偷自拍另类小说| 国产男女猛烈无遮挡免费网站| 亚洲中文字幕在线观看| 色爽黄1000部免费软件下载| 国产成人免费a在线视频app| 亚洲日产乱码一二三区别| 国产精品自在自线免费观看| 亚洲av日韩aⅴ无码色老头| 免费国产a国产片高清网站| 一级一级一级毛片免费毛片| 国产亚洲精品久久久久秋霞| 在线看片免费人成视频播| 亚洲精品私拍国产福利在线| 天天影视色香欲综合免费| 亚洲午夜无码久久久久小说| 在线观看永久免费视频网站| 一边摸一边桶一边脱免费视频| 亚洲精品无码久久久久| 久久精品一本到99热免费| 亚洲国产视频一区| 国产美女精品视频免费观看| 乱爱性全过程免费视频| 久久精品国产亚洲av麻| 免费影院未满十八勿进网站| 亚洲国产精品无码第一区二区三区| 亚洲毛片网址在线观看中文字幕| 中文字幕久精品免费视频| 亚洲经典在线中文字幕| 午夜视频免费观看| 国产一级在线免费观看| 亚洲男女性高爱潮网站| 免费少妇a级毛片人成网| 永久免费av无码入口国语片| 亚洲乱码在线播放| 亚洲精品99久久久久中文字幕| 免费看搞黄视频网站| 亚洲av日韩aⅴ无码色老头| 亚洲s色大片在线观看| 毛片免费观看的视频在线| 91视频精品全国免费观看| 亚洲综合国产成人丁香五月激情|