0

对于我用 Java 编写的一个小函数,我有以下 CREATE FUNCTION 代码。这是一个简单的函数,可以转换修改后的儒略日数字、双精度数,并将时间戳作为字符串返回。我想用这个函数在 Schema 中创建一个视图。

CREATE FUNCTION to_date_string(mjd DOUBLE) 
    RETURNS VARCHAR(50)
    LANGUAGE JAVA DETERMINISTIC NO SQL PARAMETER STYLE JAVA
    SPECIFIC to_date_string_from_utc_mjd
    EXTERNAL NAME 'CLASSPATH:org.kls.md.sqljrt.StringUtil.toFormat';

我已经将它编译成一个小的 JAR 文件。

如何注册它以便 RDBMS 能够找到并调用该函数?我尝试将此文件放在与 hsqldb.jar 文件、server.properties 文件、数据库文件相同的目录中。感觉一头雾水。

我正在使用 Squirrel-SQL 在端口 9001 上以服务器模式运行的 HSQLDB 2.3.0 快照 50 再次执行 SQL 命令。这是 Squirrel 报告的错误消息:

Error: user lacks privilege or object not found java.lang.ClassNotFoundException: org.kls.md.sqljrt.StringUtil org.kls.md.sqljrt.StringUtil in statement [CREATE FUNCTION to_date_string(mjd DOUBLE) 
    RETURNS VARCHAR(50)
    LANGUAGE JAVA DETERMINISTIC NO SQL PARAMETER STYLE JAVA
    SPECIFIC to_date_string_from_utc_mjd
    EXTERNAL NAME 'CLASSPATH:org.kls.md.sqljrt.StringUtil.toFormat']
SQLState:  42501
ErrorCode: -26
4

1 回答 1

0

您只需将其放在类路径上。JVM 在哪个 jar 中找到类是您使用的类加载器的问题。如果需要指定 jar,请编写自己的 classloader

于 2013-06-19T03:26:28.067 回答