加载 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 程序时出现此错误 [重复]