ocijdbc11在java.library.path中找不到

问题描述:

我从其他开发人员继承了一个小型Java实用程序 - 只是几个.java文件和可执行文件.jar。ocijdbc11在java.library.path中找不到

我通过传递连接字符串来运行java程序。现在我需要将连接字符串从jdbc:oracle:thin:<user>/<password>@host更改为jdbc:oracle:oci:<user>/<password>@host以开始使用厚而不是薄驱动程序。

因此,我得到错误:“ocijdbc11(在java.library.path中找不到)”。

这里我的问题:

  1. 是ocijdbc11 ojdbc7.jar的一部分吗?或者java需要什么文件? ANSW:ocijdbc11是一个库:/oracle/client/o11r2/lib/libocijdbc11.so
  2. 我怎样才能看到java使用哪个路径来找到那个ocijdbc11

以防万一:

$ ls /oracle/client/o12r1/ 

assistants  diagnostics jlib   oui   slax 
bin   dmu   ldap   owm   sqlplus 
cdata   has   lib   perl   srvm 
cfgtoollogs hs    network  plsql   ucp 
clone   install  nls   precomp  usm 
crs   instantclient odbc   QOpatch  utl 
css   inventory  OPatch   racg   wwg 
cv    javavm   opmn   rdbms   xdk 
dc_ocm   jdbc   oracore  relnotes 
deinstall  jdk   oraInst.loc root.sh 

UPD我试图用选项-Djava.library.path=/oracle/client/o11r2,并得到其他错误。但我仍然不知道如何使用Oracle 12.1而不是11.2。

UPD2我改变了使用Oracle 12而不是11的环境路径。现在错误看起来像ocijdbc12 (Not found in java.library.path)。存在/oracle/client/o12r1/lib/libocijdbc12.so文件。

我加了/oracle/client/o11r2/libLD_LIBRARY_PATH - 同样的错误(ocijdbc12 (Not found in java.library.path))。我试过选项-Djava.library.path=/oracle/client/o12r2/lib - 同样的错误。你能帮我解决吗?

ocijdbc11是一个本机库(.so或.dll),可以从Oracle Instant Client中下载。它是包含JNI调用到OCI的层。如果您想使用厚驱动程序,则需要此库。一定要安装与您的ojdbc jar相匹配的版本(即,如果您使用的是12.1版本的ojdbc jar,则错误会抱怨ocijdbc12丢失),这看起来像您使用的是11.2版本的JDBC jar。

+0

“看起来你正在使用11.2中的JDBC jar” - 是的,我想是的。但是我怎样才能改变路线到12.1?它只是一些环境变量,或者我应该重新编译Java程序? – Vikora

+0

你不需要重新编译。只需将JDBC jar替换为您可以从Oracle JDBC下载页面下载的12.1或12.2。请注意,12.2中的版本仅适用于JDK8或更高版本(不支持JDK7)。 –

+0

“只需用12.1替换JDBC jar” - 替换哪里? Java使用Oracle 11.2,但我希望它使用12.1( – Vikora

要运行程序,您需要ojdbcN.jarlibocijdbcM.so。这些组件必须来自同一个Oracle客户端; N是指Java版本,M是指Oracle版本。

当然,您也需要libclntsh.so及其相关库。

你可以试试这个(假设java7,64位):

export ORACLE_HOME=/oracle/client/o12r1 
export LIBPATH=$ORACLE_HOME/lib 
java -cp $ORACLE_HOME/jdbc/lib/ojdbc7.jar:... -Djava.library.path=$ORACLE_HOME/lib 

编辑:Java可执行文件和库应具有相同的位编号(32或64),例如,这个组合将不会工作:

$ file $JAVA_HOME/bin/java $ORACLE_HOME/lib/libclntsh.so $ORACLE_HOME/lib/libocijdbc12.so 
/usr/java6/bin/java: executable (RISC System/6000) or object module not stripped 
/orabin/OraHome_Current/lib/libclntsh.so: 64-bit XCOFF executable or object module not stripped 
/orabin/OraHome_Current/lib/libocijdbc12.so: 64-bit XCOFF executable or object module not stripped 

这里java是32位的,Oracle是64位的。

编辑:此问题被标记为AIX。那是故意的吗?

+0

一切都像你写的...但仍然不't work( – Vikora

+0

)编辑你的文章并粘贴相关行......或附加为文件或其他内容... –