首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在oracle数据库中找不到运行的Java方法

在oracle数据库中找不到运行的Java方法
EN

Stack Overflow用户
提问于 2017-01-11 11:05:07
回答 2查看 789关注 0票数 1

我无法在oracle服务器上执行我的java方法。我使用loadjava将java类加载到数据库中,并使用以下查询创建函数:

代码语言:javascript
复制
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';

我上课的方法是:

代码语言:javascript
复制
  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;
   }

每次尝试执行此函数时,我都会得到以下错误:

代码语言:javascript
复制
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.

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-11 11:31:33

函数声明中的java方法的签名是:

代码语言:javascript
复制
Period.getPeriodIdDay(int, oracle.sql.Date, oracle.sql.Date) return int

但是java类本身中的metho的签名是:

代码语言:javascript
复制
int getPeriodIdDay(int multiplicity, DATE startDate, DATE date)

如果在这里复制DATE的资本化是正确的,那么这是另一种类型。

即使这是一个复制错误:与java类的导入检查是否使用了相同的Date类。

票数 3
EN

Stack Overflow用户

发布于 2017-01-11 11:12:10

问题似乎是DATE类,我建议您使用字符串代替

您最好像这样更改您的方法类:

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41589203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档