2010-01-10 60 views
8

不同的數據庫服務器使用不同的方式引用和轉義標識符。如何使用JDBC引用/轉義標識符(如列名稱)?

E.g. 「富酒吧」與`FOO bar` VS [富巴],或「10」「」與「10 \」」,或標識符,例如FooBar的或陣列需要被引用一些數據庫,但不爲他人。

是否有任何API方法可以正確地爲給定的數據庫連接執行引用/轉義?或者任何替代解決方案?

回答

3

我認爲您的問題的答案是,如果您使用JDBC編寫數據庫中性應用程序,那麼您需要使用數據庫中性名稱,而不是需要每個數據庫供應商特殊轉義的東西。

在JDBC中沒有任何東西可以支持這個功能,ORM產品將處理這些事情

編輯:如果你正在寫一個ORM的話,我會覺得需要一個單獨的SQL生成類爲每個支持的數據庫,只是爲了處理各種語法介入,所以你必須編寫。您當然可以查看各種開源ORM的源代碼,並查看它們如何處理它。

+1

有關數據庫中性的名字,但驚喜好點仍然可以出現(例如,某個標識符在另一個數據庫中可能不可接受)。 另外,如果我..實際上寫一個ORM呢?它是否需要爲每個支持的數據庫分別進行手動編碼引用/轉義實現? – aditsu 2010-01-10 19:36:48

+1

堅持SQL標準中標識符命名的規則。那些將在任何地方工作 – 2010-01-10 19:44:33

+1

@PaulTomblin嘿,是的,「標準」。規範中有很多靈活性 - 供應商添加自己的關鍵字和保留字,如果應用程序要使用它們,則必須引用它們。我同意試圖堅持規範是最痛苦的選擇,但它*糟糕* JDBC不公開'java.sql.Connection.quoteIdentifier(...)'或'DatabaseMetaData.quoteIdentifier(...) )'方法並支持SPI,因爲這意味着你總是在進行保留​​字舞蹈。 'getIdentifierQuoteString'不做這個工作,它不表示引用規則。 – 2014-02-09 13:30:03

12

看一看

DatabaseMetaData.getIdentifierQuoteString() 

我從來沒有使用過它,但它聽起來不錯:-)

getExtraNameCharacters()也可能有一定的幫助

+0

不是一個完整的解決方案,但絕對有用! – aditsu 2010-01-11 06:07:41

相關問題