В настоящее время я работаю с хранимыми процедурами Java в Oracle и наблюдаю странное поведение при попытке установить соединение в моем коде Java.
Моя Java упакована в файл jar, а затем развернута в Oracle с помощью утилиты командной строки loadjava
. Затем в базе данных создается package
, который сопоставляет каждый метод в назначенном классе Java с функцией PL/SQL через спецификации вызова.
Некоторые из столбцов, с которыми я работаю, это CLOB
s. В Java я пытаюсь извлечь значение этогоCLOB
(отображается в спецификации вызова какoracle.sql.CLOB
)вString
:
private static String getStringFromCLOB(CLOB clob) throws SQLException {
long length = clob.length();
return clob.getSubString(1, (int) length);
}
Когда я запускаю этот код, я получаю следующую трассировку стека, отображаемую в SQL *Plus:
java.lang.ArithmeticException: / by zero
at oracle.jdbc.driver.T2SConnection.<init>(T2SConnection.java:107)
at oracle.jdbc.driver.T2SDriverExtension.getConnection(T2SDriverExtension.java:31)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:481)
at oracle.jdbc.driver.OracleDriver.defaultConnection(OracleDriver.java:505)
at oracle.sql.DatumWithConnection.getPhysicalConnection(DatumWithConnection.java:53)
at oracle.sql.DatumWithConnection.getInternalConnection(DatumWithConnection.java:177)
at oracle.sql.CLOB.getDBAccess(CLOB.java:1383)
at oracle.sql.CLOB.length(CLOB.java:197)
Раньше я просто видел сообщение Exception
, поэтому я обернул содержимое вызывающего нарушение метода с помощью try / catch
, чтобы я мог сбросить полную трассировку стека в System.out
.
Стоит отметить, что у меня это работало на Oracle 11.2.0.1.0 (32-битная ), но не работает на Oracle 11.2.0.2.0 (64-битная).
У меня также были другие Java -с поддержкой PL/SQL function
, работающие без проблем. Только те, которые пытаются установить соединение, терпят неудачу.
Я посмотрел в <ORACLE_HOME>\jdbc\lib
, и банки, хотя и называются одинаково, в этих двух дистрибутивах кажутся разными.Банки в каталоге имеют размер (11.2.0.1.0 и размер 11.2.0.2.0 ):
ojdbc5.jar
(. 1950 КБ | 1983 КБ)ojdbc5_g.jar
(3010 КБ | 3271 КБ)ojdbc5dms.jar
(2374 КБ | 2489 КБ)ojdbc5dms_g.jar
(3030 КБ | 3291 КБ)ojdbc6.jar
(2062 КБ | 2102 КБ)ojdbc6_g.jar
(3323 КБ | 3782 КБ)ojdbc6dms.jar
(2594 КБ | 2698 КБ)ojdbc6dms_g.jar
(3344 КБ | 3805 КБ)simplefan.jar
(20 КБ | 20 КБ )< --вероятно то же самоеФайлы манифеста этих jar-файлов подтверждают, что они созданы для конкретной версии, т. е. 11.2.0.1.0 или 11.2.0.2.0. Возможно ли, что ошибка была введена в 11.2.0.2.0? Или это скорее пользовательская, т.е. моя, ошибка:-)
Кроме того, где живет класс oracle.jdbc.driver.T2SConnection
?
Любая помощь / руководство очень ценится. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.