2017-01-11 2 views
1

Я не могу обработать мой метод java на сервере oracle. Я загружаю мой класс Java в базе данных, используя loadjava и создать функцию, используя этот запрос:Метод Java не найден в базе данных оракула

create or replace function getPeriodIdDay (multiplicity number, stardDate date, endDate date) return number 
as language java 
name 'Period.getPeriodIdDay(int, oracle.sql.Date, oracle.sql.Date) return int'; 

Мой метод в классе:

public static int getPeriodIdDay(int multiplicity, DATE startDate, DATE date){ 
     // day period calculation 
     int dayPeriodId = (date.dateValue().getTime() - startDate.dateValue().getTime())/MILLIS_IN_DAY; 
     return dayPeriodId/multiplicity; 
    } 

Каждый раз при попытке выполнить эту функцию, у меня есть эта ошибка:

29531. 00000 - "no method %s in class %s" 
*Cause: An attempt was made to execute a non-existent method in a 
      Java class. 
*Action: Adjust the call or create the specified method. 

Что я делаю неправильно?

ответ

3

Сигнатура метода Java в вашей декларации функции:

Period.getPeriodIdDay(int, oracle.sql.Date, oracle.sql.Date) return int 

, но указатель метода о в самой Java класса:

int getPeriodIdDay(int multiplicity, DATE startDate, DATE date) 

Если капитализация DATE не ошибка при копировании его здесь, то это другой тип.

И даже если это ошибка копирования: проверьте с импортом класса java, что используется класс Date.

+0

Да, у меня есть право, я должен использовать 'DATE' insted' Date'. – Ice

1

проблема, как представляется, класс ДАТА, я предлагаю вам использовать Строка вместо

Лучше изменить свой класс метод, как это:

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED JTESTDATE AS 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class TestDate { 
    public static int getDate(int multiplicity, String startDate, 
      String endDate) { 
     SimpleDateFormat sf = new SimpleDateFormat(); 
     sf.applyPattern("yyyymmdd");//You Have to specify format here 
     Date sd; 
     try { 
      sd = sf.parse(startDate); 
     } catch (Exception e) { 
      return -1; 
     } 
     Date ed; 
     try { 
      ed = sf.parse(endDate); 
     } catch (Exception e) { 
      return -2; 
     } 
     long dayPeriodId = (ed.getTime() - sd.getTime())/24 * 60 * 60;//this is replaced with your code 
     return (int) (dayPeriodId/multiplicity); 
    } 
} 
+0

К сожалению, это была ошибка, имя функции в oracle и java одинаково. – Ice

Смежные вопросы