HSQLDB:如何指定可以找到带有 SQL/JRT 函数的 JAR 文件的位置?

Posted

技术标签:

【中文标题】HSQLDB:如何指定可以找到带有 SQL/JRT 函数的 JAR 文件的位置?【英文标题】:HSQLDB: How to specify where a JAR file with a SQL/JRT function may be found? 【发布时间】:2013-06-19 03:14:08 【问题描述】:

我有以下用 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

【问题讨论】:

【参考方案1】:

您只需将它放在类路径中。 JVM 在哪个 jar 中找到类是您使用的类加载器的问题。如需指定jar,write your own classloader。

【讨论】:

嘿伙计们,等一下,我快死了,你的 .java 类在类路径中,但是你把前面的函数声明块放在哪里:“CREATE FUNCTION to_date_string .... ”。这个放在哪里 您好 Eyad,您只需将其作为 SQL 查询运行,就像您使用 INSERT 查询一样。 IE。 JDBC 的 executeUpdate(...) IIRC。

以上是关于HSQLDB:如何指定可以找到带有 SQL/JRT 函数的 JAR 文件的位置?的主要内容,如果未能解决你的问题,请参考以下文章

文件路径上带有空格的 JDBC 连接字符串(sqlite、hsqldb)

带有 LEFT JOIN 和 MAX 的 LibreOffice HSQLDB WHERE 子句?

具有多个支持 csv 文件的 HSQLDB

找到多个匹配 null.PUBLIC 的目录/模式 - Hsqldb / Liquibase

立即执行 hsqldb

如何在 HSQLDB 中找到顺序编号的空白?