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

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

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

    隨筆-153  評論-235  文章-19  trackbacks-0
          昨天出了一個奇怪的問題,hibernate通過實體Id(char(10)型)取得數據,session.find("from TableName where id=?","value");取不到數據,但數據庫里是有這個條數據。真奇怪,后來用pl/sql看數據庫,鼠標點到Id那時,可以看到內容后面還有一些空格,帶著期望與質疑把字段里的值自制過來, session.find("from TableName where id=?","value    ");后發現可以。我特別試了下connection.createStatement("select * from table_name where id='value'");則正常取數據,session.find("from TableName where id=?","value");而卻找不到數據,然后又試了下
    ptmt = connection.prepareStatement(select * from table_name where id=?");
    ptmt.setString(1,"year");

    這樣也不行,以是結論是:jdbc驅動PrepareStatement對char字段類型的查找問題,因為hibernate是用PrepareStatement的,自然,hibernate對char對應的屬性條件查找出現找不到的情況,

    解決辦法是:
    1.屬性用TRIM函數處理:session.find("from TableName where TRIM(id)=?","value");
    2.char改為varchar2類型

    今天試了下mysql,它不會這樣的情況,所以結論是:Oracle JDBC PreparedStatement的bug(有可能它故意這樣)


    posted on 2007-10-17 22:22 流浪汗 閱讀(5565) 評論(1)  編輯  收藏 所屬分類: oracle

    評論:
    # re: oracle jdbc char 字段 PreparedStatement 查詢問題 2007-12-26 10:26 | 流浪汗
    方法1有嚴重的性能問題。同學的機子1G內存, 2800+CPU,有100W行數據如果用了TRIM要26秒才能找出。如果去掉TRIM不到1秒。

    得出結論:如果數據長度是固定的可以用CHAR和VARCHAR2類型,如果是可變長的數據不要使用CHAR,不然寫SQL又要拼了,不能用?(PrepareStatement)

    可以看下 oracle sql =號左邊含有 TRIM 嚴重影響性能!   回復  更多評論
      
    主站蜘蛛池模板: 在线a亚洲老鸭窝天堂av高清| 亚洲成年轻人电影网站www| 亚洲日产2021三区| 人与禽交免费网站视频| 日木av无码专区亚洲av毛片| 四虎国产精品免费永久在线| 精品亚洲永久免费精品| 免费看搞黄视频网站| 亚洲AV午夜成人片| 午夜理伦剧场免费| 亚洲中文久久精品无码1| 国产免费久久精品99re丫y| 亚洲精品无码国产片| 四虎影视精品永久免费| 无遮挡国产高潮视频免费观看| 久久精品国产亚洲AV不卡| 热99RE久久精品这里都是精品免费 | 国产精品爱啪在线线免费观看| 亚洲毛片免费观看| 最近2019中文免费字幕| 日本亚洲中午字幕乱码| 国产成人综合亚洲亚洲国产第一页| 国产免费拔擦拔擦8X高清在线人| 老司机亚洲精品影院无码| 最近中文字幕mv手机免费高清| 老妇激情毛片免费| 亚洲AV永久无码精品一百度影院| 欧美男同gv免费网站观看| 午夜亚洲国产精品福利| 亚洲av一综合av一区| 日韩精品免费一区二区三区| 久久久WWW成人免费精品| 亚洲欧洲自拍拍偷综合| 无码欧精品亚洲日韩一区夜夜嗨| 在线观看片免费人成视频播放| 亚洲福利一区二区三区| ZZIJZZIJ亚洲日本少妇JIZJIZ| 6080午夜一级毛片免费看6080夜福利| 亚洲精品色播一区二区| 国产精品亚洲片在线| 成人影片麻豆国产影片免费观看|