2010-06-25 66 views
4

我遇到了我的ORMLite package问题。当我为表生成模式时,我认为逃避所有实体名称是一个好习惯。这将保护一些Java类或字段名从一个SQL保留字:Derby和Hsqldb中转义表和字段名称的问题

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中的保留字?有关如何以便携方式执行此操作的其他想法?

谢谢。

回答

3

因此,Bryan带领我走下了这条道路,尽管他的回答并不完全正确。

原来,因为我正在创建数据库为"footable",正如Bryan所说,它将会创建区分大小写。然而,当我做了选择上footable引号),德比和HSQLDB正在推动它是全部大写,所以我实际上是这样做的:

SELECT * FROM FOOTABLE 

这不是没有引号是不区分大小写(这可能会起作用),但是关于在没有引号并按大小写进行匹配时促使实体名称成为所有首都。我认为这里有一个bug ...

在任何情况下,我已经改变了我的Derby和Hsqldb,以便在ORMLite中使用所有实体名称,并且事情正在进行。国际海事组织,但工作。

2

你只需要确保案例匹配。

所以,如果它是:

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

那么它必须是:

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

如果表/列名在双引号的情况下被保留原样。

如果表格/列名不是双引号,那么Derby将处理它对大小写不敏感。

+0

感谢这个布莱恩。我在CREATE和SELECT语句中使用了相同的大小写,所以你的答案最初看起来并不合适。不过,我现在看到(根据我的答案),这是一个案例问题,德比和Hsqldb正在推动无引号的名字全部大写。 – Gray 2010-06-25 20:56:46