4

我的ORMLite 包有问题。当我为表生成模式时,我认为转义所有实体名称是一个好习惯。这将保护一些 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 中的保留字?关于如何以便携方式执行此操作的其他想法?

谢谢。

4

2 回答 2

3

因此,Bryan 非常感谢他带领我走上这条路,尽管他的回答并不完全正确。

事实证明,因为我正在创建数据库"footable",正如 Bryan 所说,它将区分大小写。但是,当我在footable不带引号)上进行选择时,Derby 和 Hsqldb 将其推广为全大写,所以我实际上是在做:

SELECT * FROM FOOTABLE

这不是在没有引号的情况下不区分大小写(这会起作用),而是在没有引号时将实体名称提升为全大写,然后按大小写匹配。我认为这里有一个错误......

无论如何,我已经更改了我的 Derby 和Hsqldb 以将ORMLite中的所有实体名称大写,并且一切正常。丑陋的国际海事组织,但工作。

于 2010-06-25T20:54:43.747 回答
2

您只需要确保案例匹配即可。

所以如果是:

create table "Footable" ("Stuff" varchar (25))

那么它必须是:

insert into "Footable" ("Stuff") values 'hi mom'

如果表/列名称用双引号括起来,则大小写保持不变。

如果表/列名不在双引号中,那么 Derby 会不区分大小写地处理它。

于 2010-06-25T20:33:49.080 回答