这几天一直在给Hibernate配置Tomcat的DataSource,网上关于这种例子也有很多,其中http://www.theserverside.com/tt/articles/article.tss?l=HibernateTomcat(介绍Tomcat5.5和Hibernate3.1联合使用非常详细实用)。不过db2的例子很少,虽然说原理是一样的,但实际去做的时候很多细节问题还是需要处理的。 写下这篇文章希望对遇到类似错误的你有些许启发。

NO1:准备好一切,配置没什么诀窍,细节决定成败。JDBC规范中的四种类型的驱动,db2实现了后三类。要从程序连接DB2,需要一下系列包,确保其在类路径中。

(1)db2java.zip包含两个驱动类COM.ibm.db2.jdbc.app.DB2Driver.class(第二类驱动,现在不推荐使用),另一个COM.ibm.db2.jdbc.net.DB2Driver.class(第三类驱动,也叫applet驱动,网络驱动);要使用以上两个驱动,将该包放到类路径中就可以了。如果是放到Tomcat的$/commom/lib中则需修改其后缀名,改为db2java.jar即可,否则Tomcat无法加载。

(2)db2jcc.jar是IBM推荐使用的,其包含一个新的第二类驱动和一个第四类驱动,二者通过uril来区分,将在后面介绍。要使用该包还需要一个辅助包db2jcc_license_cu.jar提供认证。将他们一起放进类路径中即可,使用了。

NO2:为不同的驱动配置相应的uri。这步也是相当简单的,其中,第二类驱动的uri一般为jdbc:db2:dbName;第三类驱动的uri一般为jdbc:db2://<server_name>:6789/<dbName>;第四类驱动的uri一般是jdbc:db2://<server_name>:50000/<dbName>。

通过以上两步基本是大功告成了。不过有时配置正常,也经常会报一些错误。一下是对我遇到过的错误的探讨。

(1)当使用新型第2类驱动,经常会报一些像Failure in loading db2jcct2的错误,这个时候一般是你的$/IBM/SQLLIB/BIN目录下的db2jcct2.dll出问题了,换个就没问题了。

(2)使用第四类驱动时,如果数据库没建成支持Unicode编码的时,经常会报encoding not support!对这类问题我想只有更改数据库的编码了,因为java是内置支持Unicode编码的。对这个问题的讨论,这个网站分析的很透彻。