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

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

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

    一個jdbc(setTimestamp())的bug?

    Posted on 2008-03-26 17:17 bluoy 閱讀(1791) 評論(0)  編輯  收藏
    項目中組員偶然寫了一段垃圾的sql語句,不想卻誤打誤撞的發現了一個jdbc的bug,包括Oracle 10g附帶的版本。

    詳細描述可以參考如下代碼:
       public static void testSetTimestampBug() throws Exception{
            Calendar calendar = new GregorianCalendar();
            Date d = calendar.getTime();
            
            String sql = "select 1+1 from dual where ?-sysdate<1";         //error sql
            String sql1 = "select ?-sysdate from dual";                          //no error sql
            String sql2 = "select 1+1 from dual where ?-1<sysdate";       //no error sql
            PreparedStatement pst = cn.prepareStatement(sql);
            //pst.setDate(1, new java.sql.Date(d.getTime()));                 //no  error
            pst.setTimestamp(1, new java.sql.Timestamp(d.getTime()));   //bug!!!, throw SQLException: ORA-00932
        }
    三種sql的寫法中,第一種寫法在使用setTimestamp()時會出錯,其他倆種卻不會有問題。
    即正常調用PreparedStatement.setTimestamp()方法,遇到某些特殊寫法的sql語句卻會出錯。
    本例中,拋出如下例外:
    java.sql.SQLException: ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL.
    然而,如果使用setDate()方法,則一切正常,三種寫法都沒有問題。

    因為有這個問題,如果在持久層使用了其他的中間件,則這個問題可能變的更加隱蔽,比如iBatis中的處理是這樣的:
    java.util.Date ---> ibatis.DateTypeHandler----->PreparedStatement.setTimestamp() 
    java.sql.Date ---> ibatis.SqlDateTypeHandler----->PreparedStatement.setDate()
    如果不注意輸入參數類型的話,就會遇到上述問題。我就因此費了不少周折。
    對于iBatis的使用建議,保證入口參數類型始終為java.sql.Date即可。


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲中文字幕在线无码一区二区 | 毛片免费观看的视频| 国产∨亚洲V天堂无码久久久| 国产日韩久久免费影院 | 成人免费毛片观看| 亚洲日日做天天做日日谢| 午夜影视日本亚洲欧洲精品一区| 国产精品色拉拉免费看| 亚洲va无码va在线va天堂| 中文字幕在线免费观看视频| 亚洲欧洲中文日韩av乱码| 亚洲色成人网一二三区| 久草免费福利资源站| 亚洲黄色免费网址| 中文字幕免费观看| 2022年亚洲午夜一区二区福利 | 精品国产污污免费网站aⅴ| 亚洲综合区图片小说区| 亚洲人成在线免费观看| 亚洲AV成人无码天堂| 午夜dj在线观看免费视频| 亚洲精选在线观看| GOGOGO免费观看国语| 国产亚洲一区二区精品| 久久综合给合久久国产免费| 亚洲乱码一二三四区麻豆| 青青青国产手机频在线免费观看| 午夜亚洲国产理论秋霞| 久久久久久国产精品免费免费 | 亚洲成av人片不卡无码| 免费精品国产日韩热久久| 亚洲AV无码AV吞精久久| 国产AⅤ无码专区亚洲AV| 99热在线精品免费播放6| 亚洲1234区乱码| 亚洲国产成人久久一区WWW| 成全视频在线观看免费| 男人的天堂亚洲一区二区三区| 亚洲国产精品久久久久婷婷软件| 13一14周岁毛片免费| 亚洲av无码成人黄网站在线观看|