我从其他开发者那里继承了一个小的java实用程序 - 只有几个.java文件和可执行文件.jar。
我通过传递连接字符串来运行java程序。现在我需要将连接字符串从jdbc:oracle:thin:<user>/<password>@host
更改为jdbc:oracle:oci:<user>/<password>@host
以开始使用thick而不是瘦驱动程序。
结果我收到错误:&#34; ocijdbc11(在java.library.path中找不到)&#34;。
我的问题在这里:
/oracle/client/o11r2/lib/libocijdbc11.so
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
- 同样的错误。你能帮我解决一下吗?
答案 0 :(得分:1)
ocijdbc11是一个本机库(.so或.dll),您可以从Oracle Instant Client下载它。它是包含对OCI的JNI调用的层。如果要使用粗驱动程序,则需要此库。一定要安装与你的ojdbc jar相匹配的版本(即看起来你正在使用11.2的JDBC jar,否则如果你使用的是12.1的ojdbc jar,那么错误就会抱怨ocijdbc12缺失了。)
答案 1 :(得分:0)
要运行您的计划,您需要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。这是故意的吗?