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中找不到)”。
这里我的问题:
- 是ocijdbc11 ojdbc7.jar的一部分吗?或者java需要什么文件? ANSW:ocijdbc11是一个库:
/oracle/client/o11r2/lib/libocijdbc11.so
- 我怎样才能看到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/lib
到LD_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。
要运行程序,您需要ojdbcN.jar
和libocijdbcM.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。那是故意的吗?
一切都像你写的...但仍然不't work( – Vikora
)编辑你的文章并粘贴相关行......或附加为文件或其他内容... –
“看起来你正在使用11.2中的JDBC jar” - 是的,我想是的。但是我怎样才能改变路线到12.1?它只是一些环境变量,或者我应该重新编译Java程序? – Vikora
你不需要重新编译。只需将JDBC jar替换为您可以从Oracle JDBC下载页面下载的12.1或12.2。请注意,12.2中的版本仅适用于JDK8或更高版本(不支持JDK7)。 –
“只需用12.1替换JDBC jar” - 替换哪里? Java使用Oracle 11.2,但我希望它使用12.1( – Vikora