java.lang.ArithmeticException при попытке установить соединение в Oracle 11.2.0.2.0 (64 бит)

В настоящее время я работаю с хранимыми процедурами Java в Oracle и наблюдаю странное поведение при попытке установить соединение в моем коде Java.

Моя Java упакована в файл jar, а затем развернута в Oracle с помощью утилиты командной строки loadjava. Затем в базе данных создается package, который сопоставляет каждый метод в назначенном классе Java с функцией PL/SQL через спецификации вызова.

Некоторые из столбцов, с которыми я работаю, это CLOBs. В Java я пытаюсь извлечь значение этогоCLOB(отображается в спецификации вызова какoracle.sql.CLOBString:

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?

Любая помощь / руководство очень ценится. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

7
задан jabclab 12 June 2012 в 07:32
поделиться