加载DB2 JDBC驱动程序时出现java.lang.UnsatisfiedLinkError

时间:2010-10-18 07:06:04

标签: java macos jdbc db2

我尝试将jboss-seam与db2数据库一起使用,发生以下错误

com.ibm.db2.jcc.a.SqlException: [jcc][10389][12245][3.52.95] while loading the native 
library   db2jcct2, java.lang.UnsatisfiedLinkError: no db2jcct2 in java.library.path  
an error occurred ERRORCODE=-4472, SQLSTATE=null

我尝试设置-Djava.library.path=/opt/IBM/db2/V9.5/lib64以及

-Djava.library.path=/opt/IBM/db2/V9.5/lib32

这两条路径都包含libdb2jcct2.so

我还尝试设置LD_LIBRARY_PATH无效。

操作系统是MacOs

EDIT 我还尝试使用JDBC4驱动程序db2jcc4.jar,因为jdbc4驱动程序不应该依赖本机库。

6 个答案:

答案 0 :(得分:22)

用于JDBC和SQLJ的IBM数据服务器驱动程序包括Type 2和Type 4 JDBC驱动程序。请检查以下内容:

1)确保驱动程序位于类路径中:db2jcc.jar。或者,您可以使用JDBC4驱动程序(db2jcc4.jar),但不要将它们都放在类路径中。

2)确保您在应用配置中指定了JCC驱动程序(com.ibm.db2.jcc.DB2Driver)。

3)使用类似jdbc:db2://server:port/database的Type-4网址。如果指定类似于jdbc:db2:database的Type-2 URL,则驱动程序将开始查找本机库。

答案 1 :(得分:2)

您是否尝试过设置DYLD_LIBRARY_PATH?可能值得一试。

答案 2 :(得分:2)

从路径看,这看起来像是linux / unix平台。尝试运行strace/truss以查看哪些目录正在为库打开。

答案 3 :(得分:1)

追加“driverType = 4;”到你的网址。

答案 4 :(得分:0)

我无法在任何地方找到明确的例子,所以我在这里粘贴我的解决方案。修复我的是添加“DriverType”值为“4”的xa-datasource属性。

            <xa-datasource jndi-name="java:/DB2DataSource" pool-name="DB2DataSource" enabled="true" use-ccm="true">
                <xa-datasource-property name="ServerName">
                    my.server.com
                </xa-datasource-property>
                <xa-datasource-property name="DatabaseName">
                    SAMBLEDB
                </xa-datasource-property>
                <xa-datasource-property name="PortNumber">
                    50000
                </xa-datasource-property>
                <xa-datasource-property name="DriverType">
                    4
                </xa-datasource-property>
                <driver>ibmdb2</driver>
                <xa-pool>
                    <is-same-rm-override>false</is-same-rm-override>
                </xa-pool>
                <security>
                    <user-name>username</user-name>
                    <password>supersecret</password>
                </security>
                <recovery>
                    <recover-plugin class-name="org.jboss.jca.core.recovery.ConfigurableRecoveryPlugin"/>
                </recovery>
                <validation>
                    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"/>
                    <background-validation>true</background-validation>
                    <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"/>
                    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"/>
                </validation>

            </xa-datasource>

答案 5 :(得分:-1)

如果java.library.path(使用LD_LIBRARY_PATH环境变量分配)是错误的,那么实际应该得到类似:“加载t2本机库失败”。

您可以检查java.library.path是否包含这样的路径。

System.out.println(System.getProperty("java.library.path"));

你能错过另一个像db2jcc_license_cu.jar

这样的jar

也许发布你的类路径。您可以通过阅读来自coide的属性java.class.path来获得它(如上所述)。