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 子句?