gpt4 book ai didi

java - 使用 HSQLDB 关键字的奇怪行为

转载 作者:行者123 更新时间:2023-12-01 15:42:57 33 4
gpt4 key购买 nike

在 HSQLDB 中创建新表时出现奇怪的结果。从HSQLDB的文档来看,“user”是一个关键字,通常我们不能使用这个值作为表名或列名,除非它是双引号的。

但是,我可以创建一个名为“USER”的数据库表和一个具有一个列名为“user”的数据库表 DATA_RESULT,而无需双引号关键字。

从数据库读取数据时出现问题。例如,当我执行: "select * from DATA_RESULT"并从结果集中读取“user”的值,它起作用了。

如果我执行"select user from DATA_RESULT""SELECT * from DATA_RESULT where user = 1" ,发生错误。 sql语句没有正确执行,ResultSet.next()总是返回false。

此外,来自Lists of Keywords for HSQLDB ,上面写着HyperSQL has two modes of operation, which are selected with the SET DATABASE SQL NAMES { TRUE | FALSE } to allow or disallow the keywords as identifiers. The default mode is FALSE and allows the use of most keywords as identifiers ,它没有说明“user”是否可以用作标识符。

我使用的是 HSQLDB 2.0.0。

这很令人困惑。有人知道这是怎么回事吗?

提前致谢!任何建议都会有帮助。

最佳答案

USER 是一个获取当前用户名称的函数。例如:

CALL USER

您当然可以使用 USER 作为表名或列名。

在 SELECT 语句中,在名称两边使用双引号。

CREATE TABLE DATA_RESULT ("USER" INT, DATA VARCHAR(100))
SELECT * FROM DATA_RESULT WHERE "USER" = 1

使用双引号时,大小写必须匹配。

请注意,网站上的指南会定期更新,目前对应最新版本 2.2.5。

关于java - 使用 HSQLDB 关键字的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7714681/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com