来自metalink
Subject: JDBC OCI Driver Connection Fails: UnsatisfiedLinkError: no ocijdbc9 in java.library.path or UnsatisfiedLinkError: create_stmt_c_copy
Doc ID: Note:398948.1 Type: PROBLEM
Last Revision Date: 21-MAY-2007 Status: PUBLISHED
In this Document
Symptoms
Cause
Solution
References
--------------------------------------------------------------------------------
Applies to:
JDBC - Version: 9.2.0.8
This problem can occur on any platform.
Symptoms
When running a sample JDBC OCI Driver 9.2.0.8 client
$OH_10_2_0/jre/1.4.2/bin/java -classpath $OH1_9_2_0/jdbc/lib/ojdbc14.jar:. JdbcTest
to connect to the Oracle Database 9.2.0.8 of the same machine Sun Solaris, the following exceptions are thrown with these specific LD_LIBRARY_PATH settings:
1. LD_LIBRARY_PATH=$OH2_9_2_0/lib:$OH2_9_2_0/jdbc/lib
Exception in thread "main" java.lang.UnsatisfiedLinkError: no ocijdbc9 in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at oracle.jdbc.oci8.OCIDBAccess.logon(OCIDBAccess.java:265)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:362)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:536)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:328)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at JdbcTest.main(super2.java:11)
2. LD_LIBRARY_PATH=$OH2_9_2_0/lib32:$OH2_9_2_0/lib:$OH2_9_2_0/jdbc/lib
Exception in thread "main" java.lang.UnsatisfiedLinkError: create_stmt_c_copy
at oracle.jdbc.oci8.OCIDBAccess.create_stmt_c_copy(Native Method)
at oracle.jdbc.oci8.OCIDBAccess.parseExecuteFetch(OCIDBAccess.java:1896)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2149)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2032)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2894)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:942)
at oracle.jdbc.dbaccess.DBAccess.setNlsParamsClient(DBAccess.java:1682)
at oracle.jdbc.oci8.OCIDBAccess.initNls(OCIDBAccess.java:644)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:408)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:536)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:328)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at JdbcTest.main(super2.java:11)
Cause
The errors occur because the wrong JDBC OCI libraries are pointed to by LD_LIBRARY_PATH for the version of "ojdbc14.jar" used:
1. In the first case we referenced the wrong JDBC OCI libraries:
CLASSPATH=$OH1_9.2.0/jdbc/lib/ojdbc14.jarLD_LIBRARY_PATH=$OH2_9.2.0/lib
2. In the second case JDBC components from 2 seperate ORACLE_HOMEs were used:
CLASSPATH=$OH1_9.2.0/jdbc/lib/ojdbc14.jarLD_LIBRARY_PATH=$OH2_9.2.0/lib32
Solution
Set the CLASSPATH and LD_LIBRARY_PATH to point to the same ORACLE_HOME, for example
CLASSPATH=$OH2_9.2.0/jdbc/lib/ojdbc14.jar
LD_LIBRARY_PATH=$OH2_9.2.0/lib32
References
Note 232357.1 - How to Install and Configure Oracle JDBC Drivers
Note 77332.1 - How to Test JDBC/OCI Demo on UNIX System
应用程序的驱动需要和数据库的驱动一致,如不一致也会出现此问题(UnsatisfiedLinkError)