成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle版本驅(qū)動(dòng)中使用Java Date產(chǎn)生問(wèn)題的解答

數(shù)據(jù)庫(kù) Oracle
Oracle版本在使用Java Date時(shí)會(huì)產(chǎn)生一些問(wèn)題,你是否想問(wèn)沒(méi)有其他的方法可以來(lái)正確的提供綁定變量?本文會(huì)想你提供一些方法來(lái)解決這個(gè)問(wèn)題。

如果你在Oracle版本驅(qū)動(dòng)中使用Java Date時(shí)產(chǎn)生一些問(wèn)題的時(shí)候,你是否想了解不解之處,以下的文章主要是通過(guò)對(duì)Oracle版本驅(qū)動(dòng)中使用Java Date的問(wèn)題的實(shí)際應(yīng)用的方案的介紹,來(lái)解答你在Oracle版本驅(qū)動(dòng)中使用Java Date的問(wèn)題在實(shí)際操作方面的問(wèn)題。

這里兩天都在對(duì)一條sql進(jìn)行調(diào)優(yōu)。該sql并不復(fù)雜,類似于

  1. select ... from some_view union all select ... 
    from some_table where datetime 
    >= d1 and datetime< d2 and ....  

底層使用

  1. ibatis2.1.6 + oracle 10g 

今天花了些時(shí)間繼續(xù)研究這個(gè)問(wèn)題,導(dǎo)致該問(wèn)題的原因的確是“導(dǎo)致oracle對(duì)datetime字段進(jìn)行了隱式類型轉(zhuǎn)換,最終CBO未能使用該列的全局索 引”,不過(guò)問(wèn)題不是出在ibatis上而是Oracle driver。設(shè)我們使用這樣的sql通過(guò)綁定變量(類型為java.util.date)查詢數(shù)據(jù)庫(kù),其中end_date是date類型且建立了索引。

  1. “select count(*) from table1 where end_date >=
     :1 and end_date 
    <= :2” 

通常,面對(duì)這樣的sql,我們希望它的執(zhí)行計(jì)劃走index range scan。然而在默認(rèn)情況下oracle CBO是不會(huì)選擇走索引地,以上面這語(yǔ)句為例,oracle實(shí)際走的是table full scan。為什么會(huì)這樣 呢?這類問(wèn)題是oracle版本在9.2以后引入了TIMESTAMP才開(kāi)始出現(xiàn)的。

在 9.2之前,Oracle只有DATE,而沒(méi)有TIMESTAMP。在jdbc preparedStatement.setTimestamp時(shí),綁定變量的類型會(huì)被正確的設(shè)置為DATE。而在9.2之后,oracle開(kāi)始支持 TIMESTAMP了,這兩者都能支持精度為yyyy-MM-dd hh24:mi:ss的時(shí)間(當(dāng)然TIMESTAMP能支持到納秒級(jí)別)。

但jdbc driver的api未變同樣在preparedStatement.setTimestamp時(shí),oracle driver就得選擇到底該把綁定變量的類型設(shè)置為DATE還是TIMESTAMP呢?估計(jì)是由于TIMESTAMP的精度更高,Oracle 最終默認(rèn)選擇了將綁定變量的類型設(shè)置為了TIMESTAMP。那么這個(gè)時(shí)候,如果面對(duì)實(shí)際屬性為DATE的列,那么就會(huì)導(dǎo)致 oracle隱式地進(jìn)行形如

  1. “TO_TIMESTAMP(date_column) = parameter_timestamp” 

轉(zhuǎn)換,要 知道oracle CBO不會(huì)選擇被某函數(shù)作用的列上的索引,除非是函數(shù)索引。因此,最終也會(huì)導(dǎo)致最上面的情況使用table full scan而不是index range scan。

Oracle版本就沒(méi)有提供別的方法來(lái)正確地提供綁定變量嗎?oracle提供 了幾個(gè)方法來(lái)解決這個(gè)問(wèn)題

1.升級(jí)到11g并使用新的正確的driver api。

2.將DATE列全都改成 TIMESTAMP列。

3.使用V8Compatible flag。

 

以上就是對(duì)Oracle版本驅(qū)動(dòng)中如何使用Java Date的相關(guān)的內(nèi)容的介紹,望你會(huì)有所收獲。

【編輯推薦】

  1. 檢查Oracle DICOM 對(duì)象的典型示例
  2. Oracle ID 自增代碼的詳細(xì)介紹
  3. 對(duì)Oracle Multimedia導(dǎo)出圖像的操作步驟的描述
  4. 在Oracle模式中定義媒體對(duì)象有哪些
  5. Oracle Multimedia在ORDDicom中列中存儲(chǔ)DICOM詳解

 

責(zé)任編輯:佚名 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-03-30 16:22:55

Oracle不同版本

2010-04-23 09:58:30

Oracle管理

2010-04-27 18:24:56

Oracle常見(jiàn)問(wèn)題

2010-04-28 11:09:47

Oracle常見(jiàn)問(wèn)題

2010-10-28 15:38:24

Oracle to_d

2010-09-25 15:20:43

SQL遞歸語(yǔ)句

2012-03-08 10:18:33

JavaOracle

2009-06-10 09:58:32

Oracle sequHibernate

2010-12-28 16:23:03

2010-03-30 14:32:38

Oracle Date

2010-10-25 16:13:31

Oracle to_d

2011-03-28 17:45:03

nagios問(wèn)題

2011-04-08 16:00:11

Oracle數(shù)據(jù)庫(kù)外部表

2009-09-23 13:04:58

HibernateOracle sequ

2011-07-21 11:19:51

JAVA

2010-05-11 13:42:36

MySQL隱藏空間

2010-04-06 10:40:24

2021-11-14 15:46:45

Windows 11Windows微軟

2009-09-08 14:53:46

CCNA考試

2011-04-13 09:02:37

WLAN無(wú)線
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 婷婷午夜天| 一区二区视频免费观看 | 亚洲一区二区精品视频在线观看 | 亚洲视频免费在线观看 | 夜夜精品视频 | 国产综合网站 | 国产人免费人成免费视频 | 日韩一区不卡 | 久久久国产精品一区 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 在线91| 精品国产一区二区三区成人影院 | 国产成人精品在线播放 | 日本精品一区二区 | 日韩不卡在线观看 | 欧美一区二区三区精品免费 | 国产男女猛烈无遮掩视频免费网站 | 一区二区播放 | 国产精品毛片无码 | 国产精品夜间视频香蕉 | 久草免费电影 | 国产精品爱久久久久久久 | 日韩福利在线 | 亚洲国产精品视频一区 | 亚洲毛片 | 99热国产免费 | 国产视频久久久 | www.欧美视频 | 黄色国产在线视频 | 农夫在线精品视频免费观看 | 国产精品高清在线 | 久久国产传媒 | 亚洲免费网址 | 久久久久久国产精品三区 | 欧美日韩国产中文字幕 | 久久精品一区 | 人人cao | 欧美一级片在线观看 | 欧美天堂 | 一区二区在线不卡 | 中文字幕三区 |