以前都是用java在windows下处理,最近需要在Hpunix进行处理,但是将程序发布到Hpunix后,连接数据库一直提示“No suitable driver”,估计为驱动问题,临时编写数据连接小测试程序,发现提示为:
- ava.sql.SQLException: java.lang.UnsatisfiedLinkError: /opt/IBM/db2/V8.1/lib64/libdb2jdbc.sl: specified file is not a shared library, or a format error was detected.
- at COM.ibm.db2.jdbc.app.DB2Driver.<init>(DB2Driver.java:355)
- at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
- at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
- at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
- at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
- at java.lang.Class.newInstance0(Class.java:308)
- at java.lang.Class.newInstance(Class.java:261)
- at DBTest.db3(DBTest.java:106)
- at DBTest.main(DBTest.java:342)
查看用户.profile文件,echo $PATH,echo $CLASSPATH,均正常,db2profile已经加入.profile文件;判断为驱动可以找到,但该驱动(COM.ibm.db2.jdbc.app.DB2Driver)为Type 2,这类驱动程序部分用 JAVA 编程语言编写,部分用本机代码编写。这些驱动程序使用特定于所连接数据源的本机客户端库,所以在执行过程中由于本机代码的原因造成无法正确运行。
首先在网上对此进行了搜索,发现此问题,但无人回答。扩大搜索范围,大部分碰到的为未正确的共享链接库文件,但我这里此文件存在。
然后查看日志文件,/var/adm/syslog/syslog.log、<instance_home>/sqllib/db2dump/db2diag.log,均未发现错误;
此时只能怀疑DB2的java环境设置存在问题,因为前段时间我们的DB2版本刚进行过升级。从DB2信息中心中查看DB2的java环境设置,只发现/usr/lib/pa20_64下的链接文件少了两个:libmawt.sl、libjcpm.sl,稳妥期间使用ln –s添加,测试问题仍然存在!
这个时候郁闷了,先在CSDN上来个高分求教:),无人回答?哈,看来大家都不屑回答此问题啊
因时间要求较紧,为了绕开使用本地共享链接库问题,决定更换驱动类型,Type 3的COM.ibm.db2.jdbc.net.DB2Driver,测试:
COM.ibm.db2.jdbc.DB2Exception: [IBM][JDBC Driver] CLI0616E 打开套接字时出错。SQLSTATE=08S01,应该为服务未启动,执行db2jstrt 6789,再次测试,数据库连接成功,但中文乱码,好办,执行时指定参数java -Dfile.encoding=GBK DBTest,OK,中文显示正常,Good!
突然想到Type 2是不是也是参数指定问题,执行java –help,查看参数,发现32位与64位的参数:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
因为提示的是找不到lib64下的libdb2jdbc.sl,执行添加参数“-d32”,仍然失败,错误同前,死马当活马医啦,指定参数“-d64”,执行成功!!!