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

Posted

技术标签:

【中文标题】加载 DB2 JDBC 驱动程序时出现 java.lang.UnsatisfiedLinkError【英文标题】:java.lang.UnsatisfiedLinkError while loading DB2 JDBC driver 【发布时间】:2011-04-26 19:22:56 【问题描述】:

我尝试将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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

+1 DYLD_LIBRARY_PATH 用于 MacO,而不是 LD_LIBRARY_PATH【参考方案2】:

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

【讨论】:

+1 好的提示,对于记录,Mac 上的工具称为 dtrace。 dtrace -n 'syscall::open*:entry printf("%s %s",execname,copyinstr(arg0)); '【参考方案3】:

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

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

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

你会不会错过另一个像db2jcc_license_cu.jar这样的罐子

也许发布你的类路径。您可以通过从 coide 中读取属性 java.class.path 来获取它(如上)。

【讨论】:

【参考方案4】:

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

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

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

3) 使用类型 4 的 URL,例如 jdbc:db2://server:port/database。如果您指定一个类型 2 URL,如 jdbc:db2:database,那么驱动程序将开始寻找本机库。

【讨论】:

【参考方案5】:

附加一个“driverType=4;”到您的网址。

【讨论】:

【参考方案6】:

我在任何地方都找不到明确的示例,所以我将我的解决方案粘贴在这里。解决我问题的是添加“DriverType”值“4”的 xa-datasource-property。

            <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>

【讨论】:

以上是关于加载 DB2 JDBC 驱动程序时出现 java.lang.UnsatisfiedLinkError的主要内容,如果未能解决你的问题,请参考以下文章

使用 Hibernate 将 Java 应用程序从 DB2 迁移到 BigQuery 时出现错误“找到:int64,预期:整数”

使用 mysql 运行 JDBC 程序时出现此错误 [重复]

使用 JDBC 连接器 5.1 从 Java 读取/写入 MySQL 中的 UTF-8 数据时出现问题

通过 SQOOP 连接到 DB2 时出现连接管理器错误

DB2问题,程序运行时不定时出现以下sql报错问题!

无法为 Apache Derby 加载 JDBC 驱动程序 [重复]