2013-03-19 42 views
3

我的Java應用程序正在與Apache Derby 10.8.1.2 DB進行通信。 我發現SQL異常,並想測試一個特定的情況:LANG_DUPLICATE_KEY_CONSTRAINT 我無法找到正確的.jar來導入org.apache.derby.shared.common.reference,它應該包含這個常量。如何使用Derby SQLState常量

即使德比開發人員指南建議的測試,如:

if (SQLState.equals("23505")) 

問題是,爲什麼測試一個靜態的字符串,而不是一個常數?我希望是這樣的:

if (SQLState.equals(SQLState.LANG_DUPLICATE_KEY_CONSTRAINT)) 
+0

你當然可以編寫自己的類,它提供了這樣的符號引用;這將有助於澄清您自己的代碼並使其更易於維護。 – 2013-06-29 17:26:30

回答

2

你可以不喜歡的答案......但在這裏,它是:

SQLSTATE是故意不包含在任何JAR文件,以儘量減少大小德比。從包裝說明引用:

包裝org.apache.derby.shared.common.reference說明

有用的常量,Java編譯器將在網上。包含基本常量或字符串常量的引用接口的集合。這樣的常量將被Java編譯器插入,希望導致更小的佔用空間,而不是引用字段。接口中的字段自動爲public,static和final,因此是常量。

這些類不應該隨任何Derby jar文件一起提供。如果一個jar文件附帶,那麼它很可能意味着代表該常量的字段是一個非字符串對象(例如new Integer(1)),或者最終字段是一個計算值,不能通過該字段解析爲常量Java編譯器。