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

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

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

    waysun一路陽光

    不輕易服輸,不輕言放棄.--心是夢的舞臺,心有多大,舞臺有多大。踏踏實實做事,認認真真做人。

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

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

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

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

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

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

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

    注:在mybatis將這個bug修復前,應該可以通過connection.createStatement().getConnection()拿到real connection


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

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

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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 日韩亚洲人成在线综合日本| 亚洲精品无码精品mV在线观看| 青青草原1769久久免费播放| 亚洲色大成网站www久久九| 亚洲一区二区三区免费视频| 久久精品国产亚洲AV电影| 亚洲国产女人aaa毛片在线| 4444亚洲国产成人精品| 亚洲人成在线中文字幕| 亚洲人成综合在线播放| 亚洲日本在线电影| 一区免费在线观看| 99久久国产精品免费一区二区| 国产色爽免费无码视频| 97免费人妻在线视频| 免费看男女下面日出水来| 国产乱码免费卡1卡二卡3卡| 影音先锋在线免费观看| 少妇亚洲免费精品| 亚洲av女电影网| 91在线亚洲综合在线| 产传媒61国产免费| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 国产成人A人亚洲精品无码| 4480yy私人影院亚洲| 国产精品亚洲一区二区三区| 一级免费黄色大片| 免费无码黄十八禁网站在线观看| 又黄又爽无遮挡免费视频| 久久香蕉国产线看观看亚洲片| 亚洲乱码在线观看| 13小箩利洗澡无码视频网站免费| 国产精品入口麻豆免费观看| 亚洲人成无码www久久久| 亚洲成a人片毛片在线| 91av免费在线视频| 日韩免费观看一级毛片看看| 77777_亚洲午夜久久多人| 黄网站色成年片大免费高清| 国产91色综合久久免费分享| 亚洲色成人网站WWW永久|