无法在 HSQLDB 中设置 md5 密码:找不到例程签名

Posted

技术标签:

【中文标题】无法在 HSQLDB 中设置 md5 密码:找不到例程签名【英文标题】:Can't set md5 password in HSQLDB: routine signature not found 【发布时间】:2012-05-27 19:53:42 【问题描述】:

HSQLDB 中有关 MD5 的文档有些稀缺,但我已按照以下说明启用 md5-ing 我的密码:

CREATE FUNCTION md5(VARBINARY(128))
RETURNS VARBINARY(226)
LANGUAGE JAVA
DETERMINISTIC
NO SQL
EXTERNAL NAME 'CLASSPATH:org.hsqldb.lib.MD5.digest'

现在当我尝试更新密码时:

UPDATE worker SET password = md5('pass123') WHERE wid=1

我收到以下错误:

java.sql.SQLException: routine signature not found for: PUBLIC.MD5(CHARACTER)

我对sql不太熟悉,所以我不确定我在哪里犯了错误。

【问题讨论】:

【参考方案1】:

您需要一个带有字符串而不是二进制的函数签名。

CREATE FUNCTION md5(VARCHAR(128), VARCHAR(10))
RETURNS VARCHAR(256)
LANGUAGE JAVA
DETERMINISTIC
NO SQL
EXTERNAL NAME 'CLASSPATH:org.hsqldb.lib.MD5.encode'

并使用固定的编码参数调用函数:

UPDATE worker SET password = md5('pass123', 'ISO-8859-1') WHERE wid=1

【讨论】:

@fredt:有没有一种通用的方法可以通过 SQL 语句的约定来访问那些 org.hsqldb.lib.** 方法? 无论类路径如何,都需要先创建一个函数才能调用静态方法。所有支持参数类型的公共静态函数都可以做成一个函数。

以上是关于无法在 HSQLDB 中设置 md5 密码:找不到例程签名的主要内容,如果未能解决你的问题,请参考以下文章

无法在 ocamldebug 中设置断点:“在那里找不到任何事件。”

在 Linux 服务器中设置 HSQLDB

这可以在 Hsqldb 中设置最大行大小吗?

如何在 Hypersql 数据库(HSQLDB)中设置 Rank 函数

如何在 Moya 中设置基本的 auth 用户名和密码?

HSQLDB:由于“用户缺少权限或找不到对象”,无法删除互锁表且无法删除外键