qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          Java程序員慣性思維的一個(gè)錯(cuò)誤

           很久沒有積累東西了,碰巧前幾天遇到一個(gè)的問題,雖然不大但是比較有意思,在這里稍微記錄一下,以后可以作為面試題之類的考驗(yàn)其他人,想想也遠(yuǎn)比那些被我們?cè)嵅〉念}目要實(shí)際的多:

            有表結(jié)構(gòu)如下:

        1. T_SOME_TABLE{ 
        2. crowid varchar(36); 
        3. zrmb float(7,3); 
        4. zjdw float(7,3); 
        5. }
        6.   問以下兩段代碼,哪段會(huì)出現(xiàn)錯(cuò)誤,為什么?

            代碼片段一:

        7. //后臺(tái)代碼如下: 
        8.     String hqlStr="select SUM(t.zrmb) AS SUM_1,SUM(t.zjdw) AS SUM_2 from T_SOME_TABLE t where 1=1 "
        9.     List sumList=baseDao.find(hqlStr);//hibernate實(shí)現(xiàn)查詢HQL匯總語句返回結(jié)果List 
        10.     request.setAttribute("sumList",sumList); 
        11. //前臺(tái)代碼如下: 
        12.     String sum1=""
        13.     String sum2=""
        14.     ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList"); 
        15.     if(null!=sumList){ 
        16.         for(int i=0;i<sumList.size();i++){ 
        17.             Object[] tempObj=(Object[])sumList.get(i); 
        18.             sum1=tempObj[0]==null?"0.0":tempObj[0].toString(); 
        19.             sum2=tempObj[1]==null?"0.0":tempObj[1].toString(); 
        20.         } 
        21.     } 
        22.     out.prinln("sum1:"+sum1); 
        23.     out.prinln("sum2:"+sum2);
        24.   代碼片段二:

        25. //后臺(tái)代碼如下: 
        26.     String hqlStr="select SUM(t.zrmb) AS SUM_1  from T_SOME_TABLE t where 1=1 "
        27.     List sumList=baseDao.find(hqlStr);//hibernate實(shí)現(xiàn)查詢HQL匯總語句返回結(jié)果List 
        28.     request.setAttribute("sumList",sumList); 
        29. //前臺(tái)代碼如下: 
        30.     String sum1=""
        31.     ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList"); 
        32.     if(null!=sumList){ 
        33.         for(int i=0;i<sumList.size();i++){ 
        34.             Object[] tempObj=(Object[])sumList.get(i); 
        35.             sum1=tempObj[0]==null?"0.0":tempObj[0].toString(); 
        36.         } 
        37.     } 
        38.     out.prinln("sum1:"+sum1);
        39.   實(shí)際運(yùn)行會(huì)發(fā)現(xiàn) 代碼片段2會(huì)出現(xiàn)錯(cuò)誤 而代碼片段1是正常可以運(yùn)行的,這里是在功能開發(fā)過程中 片段2是在片段1的基礎(chǔ)上慣性思維去實(shí)現(xiàn)的,而實(shí)際運(yùn)行卻會(huì)發(fā)現(xiàn) 結(jié)果并不是想要的那樣,這個(gè)動(dòng)手能力強(qiáng)的人可以實(shí)際調(diào)試一下就會(huì)很快明白里面的所以然。這里簡(jiǎn)單說一下:

            做過hibernate的人都知道 用hibernate調(diào)用sql查詢出的匯總語句,返回的結(jié)果是封裝成Object的保存到List中的,而代碼1和代碼2相比較,差別只是在字段的多少上,如果是2個(gè)以上的字段 結(jié)果是封裝成Object[]數(shù)組的,這個(gè)無可爭(zhēng)議,但是如果是一個(gè)字段的話List里保存的是Object,而不是Object[]數(shù)組。

            這樣就可以推論這里hibernate內(nèi)部是做了處理的。

            代碼2循環(huán)中應(yīng)該是:

        40. Object tempObj=(Object)sumList.get(i);  
        41. sum1=tempObj==null?"0.0":tempObj.toString();
        42. posted on 2011-11-30 10:57 順其自然EVO 閱讀(138) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2011年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 东宁县| 桃园市| 仪陇县| 留坝县| 哈密市| 临沂市| 高青县| 东安县| 石泉县| 临海市| 黎川县| 临泉县| 伊川县| 乐山市| 邵武市| 博罗县| 永泰县| 元氏县| 罗江县| 石柱| 南郑县| 民县| 合江县| 义乌市| 鲜城| 绵竹市| 榆树市| 甘肃省| 萝北县| 会同县| 涿鹿县| 绥芬河市| 昆明市| 临潭县| 连山| 深水埗区| 洪江市| 竹山县| 新密市| 都昌县| 泰顺县|