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

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

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

    waysun一路陽(yáng)光

    不輕易服輸,不輕言放棄.--心是夢(mèng)的舞臺(tái),心有多大,舞臺(tái)有多大。踏踏實(shí)實(shí)做事,認(rèn)認(rèn)真真做人。

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      167 隨筆 :: 1 文章 :: 64 評(píng)論 :: 0 Trackbacks
    轉(zhuǎn)自:http://blog.csdn.net/zhy0511/article/details/8262634

    最近在寫一個(gè)項(xiàng)目,持久層想用mybatis,但是查詢的時(shí)候如果有TimeStamp的數(shù)據(jù)則會(huì)拋出

    java.sql.SQLException: Session Time Zone not set!
    的異常,經(jīng)過(guò)網(wǎng)上的查找,發(fā)現(xiàn)是由于oracle數(shù)據(jù)庫(kù)中在建表的時(shí)候TimeStamp類型的字段加上了 WITH LOCAL TIME ZONE的條件,所以在取日期類型的值時(shí)需要設(shè)置Time Zone. 但是找了很久都沒(méi)有發(fā)現(xiàn)mybatis的配置中有關(guān)于Session Time Zone的配置。最終發(fā)現(xiàn)sessionTimeZone的設(shè)置在oracle.jdbc.OracleConnection中。于是考慮到可以將connection向下轉(zhuǎn)型成oracle.jdbc.OracleConnection。經(jīng)過(guò)搜索發(fā)現(xiàn)可以通過(guò)

    1. SqlSessionFactory.getConfiguration().getEnvironment()  
    2.                     .getDataSource().getConnection();  

    中可以拿到connection,但是最終卻發(fā)現(xiàn)這個(gè)connection對(duì)象是個(gè)代理對(duì)象,強(qiáng)制轉(zhuǎn)換成oracle.jdbc.OracleConnection時(shí)就會(huì)拋出類型轉(zhuǎn)換的異常。如此將問(wèn)題解決的對(duì)象轉(zhuǎn)移到如何拿到oracle.jdbc.OracleConnection對(duì)象,最終在網(wǎng)上找到一篇相關(guān)文章,可以使用org.apache.ibatis.datasource.pooled.PooledDataSource的靜態(tài)方法unwrapConnection(Connection conn)獲得real connection 對(duì)象。如此即可強(qiáng)制轉(zhuǎn)換成oracle.jdbc.OracleConnection之后再對(duì)sessionTimeZone進(jìn)行設(shè)置。設(shè)置方式如下:

    1. ((OracleConnection) realConn).setSessionTimeZone(TimeZone  
    2.                     .getDefault().getID())  

    但是很遺憾的是,這個(gè)靜態(tài)方法在當(dāng)前mybatis最新辦3.1.1版本中還有問(wèn)題存在,它返回的依然是個(gè)代理對(duì)象(詳見:http://code.google.com/p/mybatis/issues/detail?id=591)。所以也只能等以后版本的更新了。如果大家有更好的辦法set session time zone的話,希望能跟我分享一下,謝謝!!

    注:在mybatis將這個(gè)bug修復(fù)前,應(yīng)該可以通過(guò)connection.createStatement().getConnection()拿到real connection


    今天又發(fā)現(xiàn)一種方式,可以使用java.sql.Connection.unwrap(Class)方法拿到real connection. 不過(guò)如果驅(qū)動(dòng)包使用的是classes12.jar是不行的,估計(jì)是classes12.jar出現(xiàn)的時(shí)候java.sql.Connection接口中沒(méi)有unwrap方法。不過(guò)ojdbc6.jar這個(gè)驅(qū)動(dòng)包是可用的,并且需要注意的是,setSessionTimeZone方法的調(diào)用需要在拿到mybatis的sqlSession之后再設(shè)置,在創(chuàng)建SqlSessionFactory之后設(shè)置是不起作用的。具體原因應(yīng)該是只有在拿SqlSession的時(shí)候才會(huì)去跟數(shù)據(jù)庫(kù)建立連接吧。而且由于配置連接池的緣故,所以每次都的手動(dòng)設(shè)置,具體代碼如下:

    1. session.getConnection().unwrap(OracleConnection.class).setSessionTimeZone(TimeZone.getDefault().getID());  我的解決方法是在查詢時(shí)將TimeStamp類型字段
      進(jìn)行字符串轉(zhuǎn)換,to_char(t.BRH_TIMESTAMP,'yyyy-MM-dd HH24:MI:SS'),
    posted on 2014-04-30 10:11 weesun一米陽(yáng)光 閱讀(988) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲视频小说图片| 夜夜爽免费888视频| 97亚洲熟妇自偷自拍另类图片| 国产无遮挡裸体免费视频在线观看| 在线免费观看一级毛片| 国产在线19禁免费观看| 亚洲午夜久久久久久尤物| 免费观看大片毛片| 99视频在线免费观看| 国产福利电影一区二区三区,亚洲国模精品一区 | 最近免费中文字幕MV在线视频3 | 成人国产精品免费视频| mm1313亚洲国产精品美女| 大桥未久亚洲无av码在线| 日韩a级毛片免费观看| 亚洲av成人一区二区三区在线播放| 亚洲无线一二三四区手机| 麻花传媒剧在线mv免费观看 | 99亚洲精品卡2卡三卡4卡2卡| 亚洲乳大丰满中文字幕| 99视频在线精品免费观看6| 国产免费伦精品一区二区三区| 亚洲国产成人精品电影| 亚洲男人天堂2020| yellow免费网站| 亚洲一区二区三区无码国产| 久久不见久久见免费影院| 中文字幕成人免费高清在线视频 | 亚洲av无码天堂一区二区三区| 8x成人永久免费视频| 免费一区二区无码视频在线播放 | 色欲A∨无码蜜臀AV免费播| 国产亚洲精品美女2020久久| 亚洲AV无码乱码在线观看| 2021国产精品成人免费视频| 99免费精品视频| 美女一级毛片免费观看| 亚洲丁香色婷婷综合欲色啪| **一级毛片免费完整视| 成人自慰女黄网站免费大全| 羞羞网站在线免费观看|