我的 ORMLite package 有问题.当我为表生成模式时,我认为转义所有实体名称是一个好习惯。这将保护某些 Java 类或字段名称不成为 SQL 保留字:
CREATE TABLE "footable" ("stuff" VARCHAR(255))
我现在正在添加“原始”查询支持,以便 ORMLite 可以帮助用户执行他们自己的查询。但是,我发现在 Derby 和 Hsqldb 中,如果不转义,则不能使用实体名称。例如,以下查询:
SELECT * FROM footable
生成以下错误:
Derby: ERROR 42X05: Table/View 'FOOTABLE' does not exist.
Hsqldb: Table not found in statement [select * from footable]
如果选择表也被转义为 "footable"
,它工作正常。 ORMLite 支持的其他数据库在有或没有转义的情况下都可以正常工作:MySQL、Postgres、Microsoft SQL Server、H2 和 Sqlite。
是否有更好的方法来转义 Derby 和 Hsqldb 中的保留字?关于如何以便携方式执行此操作的其他想法?
谢谢。
最佳答案
非常感谢 Bryan 带领我走上这条路,尽管他的回答不太正确。
事实证明,因为我将数据库创建为 "footable"
然后,正如 Bryan 所说,它将区分大小写。但是,当我在 footable
(没有 引号)上进行选择时,Derby 和 Hsqldb 将其提升为全部大写,所以我实际上在做:
SELECT * FROM FOOTABLE
这不是关于在没有引号的情况下不区分大小写(这会起作用),而是关于在没有引号的情况下将实体名称提升为全部大写,然后按大小写进行匹配。我认为这里有一个错误......
无论如何,我已经更改了我的 Derby 和 Hsqldb 以将 ORMLite 中的所有实体名称大写一切正常。丑陋的海事组织,但工作。
关于java - 在 Derby 和 Hsqldb 中转义表名和字段名的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121128/