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

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

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

    布衣王子

    Email:roose2008@gmail.com QQ:79212131

    問題請教:SQL查詢語句怎樣限定返回結果集的行數

    例如:
    select * from tbale where vip = 1;
    這樣返回的結果集是表table中字段vip=1的所有紀錄。
    如果紀錄有1000行,我怎樣才能利用SQL語句在查詢的時候就只返回 100行到200行的紀錄呢?
    要怎樣的SQL語句才能實現?請教請教。
    有的人說用limit來限定,但是只有mysql才支持limit。我想找一中能長遠的方法能被大眾數據庫支持的方法。
    謝謝 (我主要考慮到在做分頁顯示的時候如果將記過集一次性查詢出來然后再來分頁打印的話太耗內存,
    如果能查詢幾行顯示幾行然后再查詢的話,這樣能夠緩解服務器的內存)

    posted on 2008-10-04 17:12 草包書生 閱讀(5134) 評論(13)  編輯  收藏

    評論

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數 2008-10-04 18:00 隔葉黃鶯

    沒有長遠的方法。  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數 2008-10-04 18:11 逝水fox

    這個是沒有辦法的了 SQLServer和MySQL在這個問題上使用不同的關鍵字
    參考Hibernate的處理
    在Loader類里面是
    if ( useLimit ) {
    sql = dialect.getLimitString( sql.trim(), useOffset ? getFirstRow(selection) : 0, getMaxOrLimit(selection, dialect) );
    }
    這里可以看到 限制返回行數的SQL他是交給具體的方言對象來處理的dialect
    而MySQLDialect
    public String getLimitString(String sql, boolean hasOffset) {
    return new StringBuffer( sql.length()+20 ).append(sql).append( hasOffset ? " limit ?, ?" : " limit ?").toString();
    }
    而SQLServerDialect則是使用的
    public String getLimitString(String querySelect, int offset, int limit) {
    if ( offset > 0 ) {
    throw new UnsupportedOperationException( "sql server has no offset" );
    }
    return new StringBuffer( querySelect.length()+8 ).append(querySelect).insert( getAfterSelectInsertPoint(querySelect), " top " + limit ).toString();
    }

    順便一說 OracleDialect是會拋出UnsupportedOperationException異常的

    你可以自己參考Hibernate的實現實現這個功能 但是 關鍵是 數據庫方言本身 是需要配置的 你自己程序雖然可以用方言的方式來猜測是哪種數據庫 但是 畢竟麻煩  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數 2008-10-04 18:13 R_XiaoGuang

    這段代碼也許對你有用
    源碼來自:http://www.tkk7.com/supercrsky/archive/2008/09/23/230723.html

    /**
    * 查詢用戶(帶分頁)
    *
    * @param startNo
    * 開始條數
    * @param maxCount
    * 最大記錄數
    * @return
    */
    public List<User> getAll(int startNo, int maxCount)
    {
    Connection conn = DBConnection.getConn();
    String sql = "select * from person";
    List<User> users = new ArrayList<User>();
    try
    {
    if (this.getAllSize() <= 0)
    return null;
    PreparedStatement pstmt = conn.prepareStatement(sql,
    ResultSet.TYPE_SCROLL_INSENSITIVE,
    ResultSet.CONCUR_READ_ONLY);
    // 最大查詢到第幾條記錄
    pstmt.setMaxRows(startNo + maxCount - 1);
    ResultSet rs = pstmt.executeQuery();
    // 將游標移動到第一條記錄
    rs.first();
    // 游標移動到要輸出的第一條記錄
    rs.relative(startNo - 2);
    while (rs.next())
    {
    User user = new User();
    user.setId(rs.getInt("id"));
    user.setUsername(rs.getString("username"));
    user.setAge(rs.getInt("age"));
    user.setRemark(rs.getString("remark"));
    users.add(user);
    }

    } catch (SQLException e)
    {
    e.printStackTrace();
    } finally
    {
    try
    {
    conn.close();
    } catch (SQLException e)
    {
    e.printStackTrace();
    }
    }
    return users;
    }  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數 2008-10-04 18:46 隔葉黃鶯

    建議放到新手區或提問區  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數[未登錄] 2008-10-04 19:06 草包書生

    @R_XiaoGuang
    謝謝,我要的就是這個!十分感謝!
    就是不知道prepareStatement內部封裝的SQL語句是什么樣的。
    感謝  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數[未登錄] 2008-10-04 19:06 草包書生

    @隔葉黃鶯
    知道了,馬上放  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數[未登錄] 2008-10-04 19:07 草包書生

    @逝水fox
    謝謝,十分感謝。我試著搞一下
    thank you  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數 2008-10-04 20:39 Ron.Liu

    強烈建議,不要用游標!!!

    可以用top關鍵字
    創建一個臨時表,用來需要返回的結果。
    先向表中插入top200,再刪除top100
    最后select中間表返回

    sql server  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數 2008-10-04 20:39 Ron.Liu

    嗯,我的方法要用存儲過程  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數 2008-10-04 20:42 Ron.Liu

    更好的方法:
    解1: select top 10 * from A where id not in (select top 30 id from A)
    解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)   回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數[未登錄] 2008-10-04 20:53 草包書生

    @Ron.Liu
    這種運算也行得通,不過mysql不支持top運算。
    不過還是感謝之極  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數[未登錄] 2008-10-04 20:55 草包書生

    @Ron.Liu
    你太聰明了  回復  更多評論   

    # re: 問題請教:SQL查詢語句怎樣限定返回結果集的行數 2008-10-23 23:52 jiaqiang

    查詢第M行到第N行的問題,可以試試以下的查詢語句:
    select 列名,[列名]..
    from (select rownum rn, 列名,[列名]..
    from(select 列名,[列名]...
    from table_name
    order by id
    )
    where rownum <= N

    )
    where rn >= M;
      回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    常用鏈接

    相冊

    java的相關連接

    最新評論

    主站蜘蛛池模板: 成人免费在线视频| 免费播放春色aⅴ视频| 亚洲乱码中文字幕在线| 全亚洲最新黄色特级网站 | 内射少妇36P亚洲区| 久久精品女人天堂AV免费观看| 国产精品亚洲一区二区三区久久 | 免费观看男人吊女人视频| 亚洲无砖砖区免费| 免费国产a国产片高清网站| 日韩精品在线免费观看| 中文有码亚洲制服av片| 亚洲精品制服丝袜四区| 成人免费看吃奶视频网站| 中文字幕无码毛片免费看| 亚洲熟妇无码AV不卡在线播放| 亚洲一区二区三区免费| 无码区日韩特区永久免费系列| 日韩在线观看免费| 亚洲不卡1卡2卡三卡2021麻豆| 中文字幕亚洲第一| 午夜免费不卡毛片完整版| 老汉精品免费AV在线播放| 黄色三级三级三级免费看| 亚洲av成人综合网 | 亚洲成AV人片高潮喷水| 亚洲毛片在线观看| 亚洲精品无码成人片在线观看| 999久久久免费精品国产| 男女拍拍拍免费视频网站| 亚洲另类自拍丝袜第五页| 亚洲国产成人精品不卡青青草原| gogo全球高清大胆亚洲| 免费a级毛片无码a∨蜜芽试看 | 在线观看成人免费视频不卡| 中文在线免费看视频| 国产精品亚洲专区无码唯爱网| 亚洲视频在线观看网址| 国产亚洲av片在线观看16女人| 亚洲国产综合无码一区二区二三区| 成人免费视频88|