2010-06-25 68 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