在Derby和Hsqldb中转义表和字段名称的问题

时间:2010-06-25 20:11:58

标签: java orm hsqldb derby ormlite

我的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]

如果select表也作为"footable"转义,它可以正常工作。 ORMLite支持的其他数据库可以在有或没有转义的情况下正常工作:MySQL,Postgres,Microsoft SQL Server,H2和Sqlite。

有没有更好的方法来逃避Derby和Hsqldb中的保留字?关于如何以便携方式做到这一点的其他想法?

感谢。

2 个答案:

答案 0 :(得分:3)

尽管他的答案并不恰到好处,但是布莱恩对我的追随感到非常荣幸。

事实证明,因为我正在创建数据库为"footable",然后像Bryan所说的那样,它将创建区分大小写。但是,当我在footable没有引号)上进行选择时,Derby和Hsqldb正在宣传它全部为大写,所以我实际上在做:

SELECT * FROM FOOTABLE

如果没有引号(这可能有效),它不是不区分大小写,而是在没有引号然后按案例匹配时将实体名称提升为所有大写字母。我认为这里有一个错误......

无论如何,我已经改变了我的Derby和Hsqldb来大写ORMLite中的所有实体名称并且事情正在发挥作用。丑陋的国际海事组织,但工作。

答案 1 :(得分:2)

你必须确保案件匹配。

所以如果是:

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

然后它必须是:

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

如果表/列名称是双引号,则大小写将保留原样。

如果表/列名称不是双引号,则Derby会将其处理为对case不敏感。