2013-03-07 83 views
1

我剛開始使用ORMLite,並且正在家中使用它來實驗MySQL。現在我決定嘗試在Oracle上使用它,但注意到列名區分大小寫的問題。ORMLite和Oracle - 區分大小寫的列名稱

使用TableUtils.createTableIfNotExists()時,它似乎會生成CREATE語句,將表名和列名用雙引號括起來。例如:

CREATE TABLE 「T_SUBURB」( 「ID」 NUMERIC, 「說明」 VARCHAR2(255) NOT NULL, 「gnaf」 VARCHAR2(255),PRIMARY KEY( 「ID」))

這意味着當我試圖在Oracle SQL Developer中查詢數據庫時,我必須使用雙引號來指定表名和列名。這在使用MySQL時似乎沒有發生。

我必須承認我是一個SQL新手,但在試圖查詢它們時,將每個表或列名稱用雙引號括起來似乎並不自然。看一下OracleDatabaseType的實現,看起來在這個例子中,實體名是有意雙引號的。

有沒有人知道一種方法來關閉這種行爲?

我目前正在從maven-central和Oracle 11g運行版本4.43。乾杯。

回答

1

當使用TableUtils.createTableIfNotExists()時,它看起來會生成CREATE語句,用雙引號將表名和列名換行。

這是正確的。 ORMLite的挑戰在於它必須防止特殊字符或保留字作爲字段和表名。諸如"index""create"之類的字可能會生成良好的字段名稱,但會導致無效的SQL。

但是,根據我的OracleDatabaseType的讀數應該產生大寫字段名稱:

@Override 
public boolean isEntityNamesMustBeUpCase() { 
    return true; 
} 

如果創建你的領域作爲"description"那麼什麼是錯的。 DESCRIPTION工作嗎? ORMLite是否生成您的模式並使用Oracle JDBC URI?喜歡的東西:

jdbc:oracle:... 

如果不使用JDBC的URI一樣,那麼ORMLite可能沒有使用Oracle數據庫類型來創建表。如果您需要它使用Oracle,你可以創建你

ConnectionSource connectionSource = 
    new JdbcConnectionSource(databaseUrl, new OracleDatabaseType()); 

希望這有助於。

+0

嗨Gray, 謝謝你的回答,你是正確的 - 表名是大寫的,我只是從內存中寫的例子。 我接受關於創建無效SQL的評論,然而ORMLite是我見過的第一個ORM,因爲使用了保留字或者在創建時並未失敗,或者在嘗試使用SQL時失敗。 我想知道是否可以有一個選項,允許我指定是否使用名稱轉義(默認爲true是向後兼容)。這樣開發人員可以選擇是否需要此功能。 – Aidos 2013-03-12 13:13:40

+0

我向你保證,休眠和其他現代的ORM做同樣的轉義。問題是你不想使用大寫字母還是我錯過了某些@Aidos? – Gray 2013-03-12 16:19:38