Oracle JDBC驱动中对Date支持的改动

——一直我们在Oracle8i上面用的程序,昨天发现放到9i数据库上面,用9i的JDBC驱动
连接后,发现我们用Java的Date类型放入到数据库DATE类型字段的数据,没有了时分
秒的信息。但是在8i上面用8i的JDBC驱动是没有问题的。换了一个我们自己Patch过的
8iJDBC驱动连9i数据库,DATE型的数据又可以保存时间信息了。结论就是9i的驱动是
不能将Java的Date里面的时间信息放入到DATE里面。

——翻查了Oracle的FAQ,果然发现这个结论和相应的解决办法:

Prior to 9.2, the Oracle JDBC drivers mapped the DATE SQL type to java.sql.Timestamp. This made a certain amount of sense because the Oracle DATE SQL type contains both date and time information as does java.sql.Timestamp. The more obvious mapping to java.sql.Date was somewhat problematic as java.sql.Date does not include time information. It was also the case that the RDBMS did not support the TIMESTAMP SQL type, so there was no problem with mapping DATE to Timestamp.

In 9.2 TIMESTAMP support was added to the RDBMS. The difference between DATE and TIMESTAMP is that TIMESTAMP includes nanoseconds and DATE does not. So, beginning in 9.2, DATE is mapped to Date and TIMESTAMP is mapped to Timestamp. Unfortunately if you were relying on DATE values to contain time information, there is a problem.

There are several ways to address this problem:

Alter your tables to use TIMESTAMP instead of DATE. This is probably rarely possible, but it is the best solution when it is.

Alter your application to use defineColumnType to define the columns as TIMESTAMP rather than DATE. There are problems with this because you really don’t want to use defineColumnType unless you have to (see What is defineColumnType and when should I use it?).

Alter you application to use getTimestamp rather than getObject. This is a good solution when possible, however many applications contain generic code that relies on getObject, so it isn’t always possible.

Set the V8Compatibility connection property. This tells the JDBC drivers to use the old mapping rather than the new one. You can set this flag either as a connection property or a system property. You set the connection property by adding it to the java.util.Properties object passed to DriverManager.getConnection or to OracleDataSource.setConnectionProperties. You set the system property by including a -D option in your java command line.

java -Doracle.jdbc.V8Compatibility=”true” MyApp

大城小事

——今天收到了黎明最新的EP,惊奇的是里面居然又有一首《大城小事》。继杨千嬅、
张学友之后的第三个版本。细细听落,其实第三个黎明的版本是有歌词上面的一些不同
的,可能是林夕觉得要搞点新意思上去吧,而且歌词跟原先的版本有呼应的部分。

——三个版本,除却对歌手的喜爱之外,还是觉得学友版的是最正的,除了本身唱功,
不要忘了这个版本是学友在一个慈善演唱会上的Live版本来的,绝非在录音室经过效果
PS的哦。有兴趣的朋友自己上网找找这三个版本来听听比较一下吧,这里就只是放上两
套不同的歌词,两套的曲词作者都是雷颂德、林夕。

——原版:

青春仿佛因我爱你开始
但却令我看破爱这个字
自你患上失忆 便是我扭转命数的事只因当失忆症发作加深
没记住我但却另有更新蜜运
像狐狸精般 并未允许我步近

无回忆的余生 忘掉往日情人
却又记住移情别爱的命运
无回忆的男人 就当偷厄与瞒骗
抱抱我不过份

吻下来 豁出去 这吻别似覆水
再来也许要天上团聚
再回头 你不许 如曾经不登对
你何以双眼好像流泪

彼此追忆不怕爱要终止
但我大概上世做过太多坏事
能从头开始 跪在教堂说愿意

娱乐行的人影 还在继续繁荣
我在算着甜言蜜语的寿命
人造的蠢卫星 没探测出我们已
已再见不再认

吻下来 豁出去 这吻别似覆水
再来也许要天上团聚
我下来 你出去 讲再会也心虚
我还记得到天上团聚
吻下来 豁出去 从前多么登对
你何以双眼好像流泪
每年这天记得再流泪

——第二版:
想不起怎么会与你开始
甚至话过我爱你三个字
大概是我失忆 并没记起我做过的事

不想等失忆症发作加深
愿记住我被你热吻过的幸运
未来别担心 道别已经这样近

无回忆的余生 忘掉往日情人
却又注定移情别爱的命运
无回忆的男人 愿你不必再怜悯
过去了不要问

吻下来 豁出去 这吻别似覆水
再来也许要天上团聚
再回头 更唏嘘 如曾经不登对
我何以双眼好像流泪

彷佛一种感觉永远终止
是我或你上世做过太多坏事
能从头开始 跪在教堂说愿意

娱乐行的人影 还在继续繁荣
你在算着甜言蜜语的寿命
人造的蠢卫星 没探测出我们已
已再见不再认

吻下来 豁出去 这吻别似覆水
再来也许要天上团聚
你下来 我出去 讲再会也心虚
我还记得到天上团聚
吻下来 豁出去 从前多么登对
我何以双眼好像流泪
每年这天记得再流泪

已经没有比较的乐趣了

——今天上5460,又看到同学间相互说如何如何爽。都快五年了,基本上当个IT民工,
就没有长时间的爽过,当然也幸甚没有长时间(超过大半年的那种)的不爽过。不过加
班这个词,已经是听腻了,说腻了,烦腻了。看人家在别的公司如何如何的爽,也看得
多了,反正这些爽我总是触摸不到的,已经没有跟人家比较的那份心情和乐趣了。反正
看到自己就看到中国IT民工的部分凄凉(当然,还是觉得有更多的人比我更加的不爽和
凄凉,我已经算是幸运的一个了)。

——每次想起加班就心烦气燥,但是进入状态之后,就一发不可收拾,常常想着写完这
个模块就收工,但是一做完这个又想不如继续做完下一个。难听点就是说“犯贱”。当
你想到加班并不会给你带来补贴或者补假,你就会顿然失去动力,所以只有用着那份对
自己工作的职业责任感来支撑着,然后就是一个普通程序员对代码的执着追求,只有那
个时候才能抛开现实中所有的不公和不爽,完全把自己沉浸在枯燥开发带来实现后的喜
悦之中。几乎一年没有碰过自己CMS的代码,两年前可能觉得还可以的代码,经过两年
之间不少项目的改进,不少开发人员的修修补补、增增改改,现在看上去已经是面目全
非,连自己都认不得,不少看上去很烂的代码还居然署上我的大名……还好吧,起码两
年之后能够看到之前自己的烂,证明两年间我还是有进步的,虽然近年来,经我手出来
的代码已经越来越少了。每次看到自己之前的烂,就是证明自己长进的关键。一个开发
人员就是在这种恶心的涅槃中不断的否定和改进自己,继续自己的苦命生涯。

——这几天都是晚晚的晃悠回家,坐完178下车,经过到处都是烧烤档的中大东门,然
后穿越熟悉而现在又陌生的校道,重温曾经努力过、颓废过的生活,想起当年莽撞幼稚
的毕业后初初工作的生涯。然后就是不知不觉的到家了。

——好像是有点不知所谓了,不过民工生活就是这样不知所谓的。写在我参加工作的五
周年前。

Make believe it’s your first time

——今天加班,从移动硬盘里面翻出好久之前down的《最美女声》,听到其中一首歌,
感觉不错,所以就上来推介一把吧。

——《Make believe it’s your first time》,歌手Karen Carpenter,对我来说比较陌
生。其实主要是我平常比较少听英文歌的原因 :p 只知道她最后是因为厌食症导致心脏
病去世的。这首歌选自谢世前一年录制的首张个人专辑。

We’ve tried our hand at love before
We’ve been around the game enough
to know the score
But then is then, and now is now
And now is all that matters anyhow

Make believe it’s your first time
leave your sadness behind
Make believe it’s your first time
And I’ll make believe it’s mine

The door is closed
It’s you and me
We’ll take our time with love
the way it ought to be
This moment’s ours
tonight’s the night
And if we fall in love
Well, that’s all right

Make believe it’s your first time
leave your sadness behind
Make believe it’s your first time
And I’ll make believe it’s mine
Make believe it’s your first time
And I’ll make belive it’s mine