如何使用Derby SQLState常量

时间:2013-03-19 09:39:36

标签: java derby

我的Java应用程序正在与Apache Derby 10.8.1.2 DB进行通信。 我捕获SQL异常并希望测试特定情况:LANG_DUPLICATE_KEY_CONSTRAINT 我无法找到适当的.jar来导入org.apache.derby.shared.common.reference,它应该包含这个常量。

即使是德比开发者指南也建议测试如下:

if ( SQLState.equals( "23505" ) ) 

问题是,为什么要测试静态字符串而不是常量?我希望有类似的东西:

if ( SQLState.equals( SQLState.LANG_DUPLICATE_KEY_CONSTRAINT ) ) 

1 个答案:

答案 0 :(得分:2)

你可能不喜欢这个答案......但这里是:

故意不将SqlState包含在任何jar文件中,以尽量减小Derby的大小。引用包描述:

  

包org.apache.derby.shared.common.reference说明

     

Java编译器将内联的有用常量。包含基本或字符串常量的引用接口的集合。这些常量将由Java编译器内联,希望导致占用空间更小,而不是对字段的引用。接口中的字段自动为public,static和final,因此为常量。

     

这些类不需要随任何Derby jar文件一起提供。如果一个随附Jar文件,则很可能意味着表示常量的字段是非String对象(例如new Integer(1))或者final字段是无法通过其解析为常量的计算值。 Java编译器。