<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語句,不想?yún)s誤打誤撞的發(fā)現(xiàn)了一個jdbc的bug,包括Oracle 10g附帶的版本。

    詳細(xì)描述可以參考如下代碼:
       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()時會出錯,其他倆種卻不會有問題。
    即正常調(diào)用PreparedStatement.setTimestamp()方法,遇到某些特殊寫法的sql語句卻會出錯。
    本例中,拋出如下例外:
    java.sql.SQLException: ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL.
    然而,如果使用setDate()方法,則一切正常,三種寫法都沒有問題。

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲一区二区三区免费| 国产成人综合亚洲亚洲国产第一页| 18gay台湾男同亚洲男同| A国产一区二区免费入口| 114一级毛片免费| 亚洲va中文字幕无码| 亚洲日韩精品无码专区加勒比☆ | 亚洲国产综合精品| 久久国产乱子伦精品免费不卡| 国产亚洲精品AA片在线观看不加载 | 免费精品无码AV片在线观看| 午夜免费不卡毛片完整版| 亚洲成人免费网站| 99国产精品免费视频观看| 久久久久无码精品亚洲日韩 | 四虎影视久久久免费| 国产午夜鲁丝片AV无码免费| 亚洲欧美成人综合久久久| 最近中文字幕免费mv视频7| 亚洲乱码国产乱码精品精| 亚洲无人区码一二三码区别图片| 五月婷婷在线免费观看| 亚洲成a人片在线网站| 亚洲免费观看在线视频| 亚洲首页在线观看| 88av免费观看| 国产午夜亚洲精品午夜鲁丝片| 国产精品无码永久免费888| 久久精品国产精品亚洲下载| 国产精品成人免费观看| 伊人久久综在合线亚洲91| caoporn成人免费公开| 中文亚洲AV片在线观看不卡| 三年在线观看免费观看完整版中文| 日本免费一区尤物| 亚洲a∨无码一区二区| 国产乱色精品成人免费视频| 精品免费AV一区二区三区| 一二三四视频在线观看中文版免费| 亚洲人成网站18禁止久久影院| 中国毛片免费观看|