Ошибка при подключении к oracle. Получение ошибки unsatisfiedlink для метода t2cGetCharSet

#java #oracle #jdbc #drivers

Вопрос:

Я запускаю серию юнитов с использованием Apache ANT с использованием JDK 1.5.

Все юниты, использующие драйвер Oracle JDBC, выдают ошибку unsatisfiedlink, показанную ниже.

Какую родную библиотеку он ищет и как мне это решить? Что должна содержать переменная PATH?

 java.lang.UnsatisfiedLinkError: oracle/jdbc/driver/T2CConnection.t2cGetCharSet([CI[CI[CI[CII[SLoracle/jdbc/driver/GetCharSetError;)S
        at oracle.jdbc.driver.T2CConnection.getCharSetIds(T2CConnection.java:2957)
        at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:320)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:361)
        at oracle.jdbc.driver.T2CConnection.<init>(T2CConnection.java:142)
        at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:79)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:595)
        at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:196)
        at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPhysicalConnection(OracleConnectionPoolDataSource.java:114)
        at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:77)
        at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:59)
        at oracle.jdbc.pool.OracleConnectionCacheImpl.getNewPoolOrXAConnection(OracleConnectionCacheImpl.java:401)
        at oracle.jdbc.pool.OracleConnectionCacheImpl.setMinLimit(OracleConnectionCacheImpl.java:752) 
 

Комментарии:

1. Какая это версия драйвера Oracle JDBC? Так ли это classes12.zip, или ojdbc14.jar, или совсем другой?

Ответ №1:

Решено!

На самом деле это было устаревшее ojdbc14.jar файл, вызывающий эту проблему. Все, что я сделал, это обновил его, и теперь проблема устранена. Файл классов

Спасибо

Ответ №2:

Было это, вы должны добавить classes12.jar или classes13.jar к вашему пути к классу (не уверен в названии, прошло больше года, погуглите эти…)

Ответ №3:

«Выбрасывается, если виртуальная машина Java не может найти соответствующее определение на родном языке метода, объявленного родным».

Означает, что он ищет DLL/так что-вы, вероятно, используете ТОЛСТЫЙ драйвер ? Драйвер JDBC 2 ?

Если да, то вы, возможно, захотите добавить OCI.DLL и т.д.

Комментарии:

1. Вы указываете JRE, где найти библиотеку DLL с-Djava.library.path

Ответ №4:

Вам нужно передать-Djava.library.path=YOUR_ORACLE_HOMEbin в JRE в качестве параметра времени выполнения

Так….

 java [other java switches   runtime parameters] -Djava.library.path=YOUR_ORACLE_HOMEbin run-classname
 

Кроме того, убедитесь, что jar в пути к классу такой же, как в файле $ORACLE_HOME/jdbc/lib… при необходимости перезапишите файл Eclipse с помощью Oracle.

Если это не сработает, это поможет узнать, какую версию Oracle вы используете, так как это повлияет на то, следует ли вам использовать classes12.jar или ojdbc14.jar

Ответ №5:

Возникла та же проблема; решена путем изменения URL-адреса подключения с jdbc:oracle:oci:@//localhost:1521/service_name чтобы jdbc:oracle:thin:@//localhost:1521/service_name