我的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 ) )
答案 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编译器。