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

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

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

    Oo ' Smiling on Java ' oO

    從夢里回來,依然記得夢里有你...

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      8 隨筆 :: 0 文章 :: 10 評論 :: 0 Trackbacks

    ??????這兩天在回來寫一些業(yè)務代碼的時候,發(fā)現(xiàn)需要一個需要獲得表的記錄數(shù),其實可以通過循環(huán)獲得,不過,那也是實在效率低的可憐。因為之前沒有用過,現(xiàn)在用起來,還真是有點小問題,起初使用JDBC,都是使用 預編譯方式PreparedStatement執(zhí)行SQL語句的,發(fā)現(xiàn)rs.last()不能用,那當然rs.getRow()也得不到數(shù)據(jù)記錄數(shù)啦。然后問了朋友半天,發(fā)現(xiàn)還有個 Statement ,蠻好用的,實現(xiàn)對數(shù)據(jù)庫的一般查詢。
    ????? 一、不帶參的:
    ??????Statement stmt=con.createStatement();
    ??????ResultSet rs=stmt.executeQuery("select * from DBTableName");?
    ????? 以上這種方式是可行的,但是就需要獲得記錄數(shù)來說,這個實現(xiàn)起來恐怕還是有點麻煩,那么就需要來個帶參的:Statement stmt =?
    ????? con.createStatement(?ResultSet.TYPE_SCROLL_INSENSITIVE,?ResultSet.CONCUR_READ_ONLY);
    ????? ResultSet rs=stmt.executeQuery("select * from DBTableName");?
    ????? 這樣就能夠很輕松的得到一個記錄集行數(shù)了。
    ????? 至于以上取值方式和PreparedStatement是一樣的,就不說了。。。
    ????? 具體的實現(xiàn)方式:只要把連接驅(qū)動修改一下,就可以直接運行。我睡覺去了。。
    ????? 如果要看具體點的可以點擊這里啦...

    ?1 package ?sqlpersistent;
    ?2
    ?3 import ?java.sql.Connection;
    ?4 import ?java.sql.DriverManager;
    ?5 import ?java.sql.ResultSet;
    ?6 import ?java.sql.Statement;
    ?7
    ?8 public ? class ?GetCountTest
    ?9 {
    10 ????Connection?con = null ;
    11 ???? public ?GetCountTest()? throws ?Exception?
    12 ???? {
    13 ????????Class.forName( " com.microsoft.jdbc.sqlserver.SQLServerDriver " ); // 連接驅(qū)動
    14 ????????con? = ?DriverManager.getConnection( " jdbc:microsoft:sqlserver://localhost:1433;databaseName=[YourDataBaseName] " , " [User] " ,? " [Password] " ); // 連接數(shù)據(jù)庫,此處使用microsoft的????
    15 ????}

    16 ????
    17 ???? public ? static ? int ?getUserCount()?
    18 ???? {
    19 ????????String?sql? = ? " select?*?from?[YourTableName] " ;?
    20 ???????? try
    21 ???????? {
    22 ????????????Statement?stmt? = ? new ?GetCountTest().con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); // 第一個參數(shù)是:游標類型,可以自由的前后滾動;第二個是設置只讀????????????
    23 ????????????ResultSet?rs? = ?stmt.executeQuery(sql); // 執(zhí)行SQL,返回結(jié)果集????????????
    24 ???????????? while ?(rs.next())
    25 ???????????? {
    26 ????????????????rs.last(); // 移動到最后一行
    27 ???????????????? return ?rs.getRow(); // 獲得當前行號:此處即為最大記錄數(shù)
    28 ????????????}
    ????????????
    29 ????????}

    30 ???????? catch ?(Exception?e)
    31 ???????? {
    32 ????????????e.printStackTrace();????????????
    33 ????????}

    34 ???????? return ? - 1 ;
    35 ????}

    36 ???? public ? static ? void ?main(String[]?args)
    37 ???? {
    38 ????????System.out.println( " 返回的記錄數(shù): " + getUserCount());
    39 ????}
    ????
    40 }

    41


    ?

    posted on 2006-11-07 01:46 Jwin 閱讀(7923) 評論(9)  編輯  收藏 所屬分類: JDBC

    評論

    # re: 獲得ResultSet返回記錄數(shù) 2006-11-07 09:56 馬嘉楠
    好像不用這么麻煩把,如果只是要記錄數(shù)的話,改一下SQL語句就可以了

    select count(*) total from DBTableName;

    rs = stmt.executeQuery(sql);

    int totalRows = rs.getLong("total");

    之后totalRows就是你想要得記錄數(shù),只需要一步就能獲得你要的結(jié)果

    如果把所有的紀錄都查出來,一行一行移動到最后一行,再取行號,效率也太慢了

    遇到有幾萬幾十萬紀錄的大表,你就該哭了(即使幾千條也很慢啊)

    而且如果是大表查數(shù)據(jù)的話,也只是返回一部分,例如返回前100個記錄

    select first 100 * from DBTableName

      回復  更多評論
      

    # re: 獲得ResultSet返回記錄數(shù) 2006-11-07 10:04 馬嘉楠

    con.prepareStatement( SQL, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

    SQL是你的SQL語句,我記得似乎這樣也可以  回復  更多評論
      

    # re: 獲得ResultSet返回記錄數(shù) 2006-11-07 11:42 Jwin
    @馬嘉楠

    這樣也是可以的...
    發(fā)現(xiàn)其實我還是SQL不過關(guān),謝謝嘉楠兄的指導啦..  回復  更多評論
      

    # re: 獲得ResultSet返回記錄數(shù) 2006-11-07 16:18 馬嘉楠
    @Jwin

    我也是最近寫了一些這方面代碼,多練習就熟悉了
    其實SQL也有很多東西學的,只不過基本的掌握了,就可以應付大多數(shù)問題了
      回復  更多評論
      

    # re: 獲得ResultSet返回記錄數(shù) 2006-11-07 21:54 Jwin
    @馬嘉楠

    所以這兩天我又在翻Sql的資料...
    以防下次出這樣的錯誤...  回復  更多評論
      

    # re: 獲得ResultSet返回記錄數(shù) 2007-02-08 14:08 jasonu
    rs.getLong("total"); 可以嗎?  回復  更多評論
      

    # re: 獲得ResultSet返回記錄數(shù) 2007-03-13 20:58 wyp
    好象不能顯示,,你自己試試看,,  回復  更多評論
      

    # re: 獲得ResultSet返回記錄數(shù) 2007-04-10 12:08 furong
    為什么按照馬嘉楠提到的方法來做
    他最后老提示我說
    at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
    好象是total那里出錯了
    請問這是為什么呢  回復  更多評論
      

    # re: 獲得ResultSet返回記錄數(shù) 2009-09-02 16:09 douboer
    int totalRows = rs.getLong("total");
    類型就不對,你試過嗎?不懂不要瞎說  回復  更多評論
      


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 真实国产乱子伦精品免费| 亚洲成人午夜电影| 免费高清资源黄网站在线观看| 成人免费区一区二区三区| 亚洲丁香婷婷综合久久| 91精品国产亚洲爽啪在线影院| 亚洲一本大道无码av天堂| 在线观看视频免费完整版| 久9久9精品免费观看| 一级毛片在线完整免费观看| 亚洲私人无码综合久久网| 亚洲最大黄色网址| 亚洲视频在线一区| 国产亚洲精品岁国产微拍精品| 四虎永久免费影院在线| 国外成人免费高清激情视频| 免费观看的毛片大全| 最好看的中文字幕2019免费| 日本中文字幕免费高清视频| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲视频一区网站| 亚洲国产另类久久久精品| 日韩一卡2卡3卡4卡新区亚洲| 又黄又大又爽免费视频| 国产成人免费a在线视频app | 亚洲 欧洲 自拍 另类 校园| 亚洲美女人黄网成人女| 亚洲最大福利视频网站| 亚洲高清专区日韩精品| 国产亚洲av片在线观看播放| 久久精品亚洲福利| 国产午夜亚洲精品理论片不卡| 亚洲国产成人影院播放| 亚洲成A∨人片天堂网无码| 亚洲国产天堂久久久久久| 亚洲国产小视频精品久久久三级 | 国产亚洲中文日本不卡二区| 亚洲宅男精品一区在线观看| 亚洲Av高清一区二区三区| 亚洲人成人网毛片在线播放| 亚洲日韩精品A∨片无码加勒比|