<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即可。


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


    網站導航:
     
    主站蜘蛛池模板: 野花香高清视频在线观看免费| 亚洲国产成人精品激情| 黄床大片30分钟免费看| 四虎免费在线观看| 亚洲国产午夜精品理论片在线播放 | 亚洲短视频在线观看| 日本免费大黄在线观看| 内射干少妇亚洲69XXX| 99re在线免费视频| 亚洲中字慕日产2020| aaa毛片免费观看| 国产亚洲精品拍拍拍拍拍| 日韩a毛片免费观看| 亚洲午夜福利在线观看| 日本卡1卡2卡三卡免费| 亚洲美女色在线欧洲美女| 免费av欧美国产在钱| 国产成人亚洲精品播放器下载 | 无遮挡a级毛片免费看| 国产日韩成人亚洲丁香婷婷| 国色精品va在线观看免费视频| 亚洲伦另类中文字幕| 四虎永久在线精品免费网址| 亚洲AV日韩综合一区| 2048亚洲精品国产| 99视频在线免费| 久久亚洲国产最新网站| 亚洲va中文字幕无码| 午夜爽爽爽男女免费观看影院| 亚洲乱码一二三四区国产| 免费A级毛片无码A| 免费看男人j放进女人j免费看| 亚洲人成网站看在线播放| 亚洲国产V高清在线观看| 99re6在线精品视频免费播放| 亚洲一区欧洲一区| 中文亚洲AV片在线观看不卡| 91成年人免费视频| 亚洲精品黄色视频在线观看免费资源 | 免费人妻无码不卡中文字幕系| 亚洲欧美成人综合久久久|