3

私の Java アプリは Apache Derby 10.8.1.2 DB と通信しています。SQL 例外をキャッチし、特定のケースをテストしたい:この定数を含むと思われるLANG_DUPLICATE_KEY_CONSTRAINT 、インポートする適切な .jar を見つけることができませんでした。org.apache.derby.shared.common.reference

Derby Developer's Guide でさえ、次のようなテストを提案しています。

if ( SQLState.equals( "23505" ) ) 

問題は、定数ではなく静的文字列をテストする理由です。私は次のようなものを期待します:

if ( SQLState.equals( SQLState.LANG_DUPLICATE_KEY_CONSTRAINT ) ) 
4

1 に答える 1

2

あなたは答えが気に入らないかもしれません...しかし、ここにあります:

SqlState は、Derby のサイズを最小限に抑えるために、意図的にどの jar ファイルにも含まれていません。パッケージの説明からの引用:

パッケージ org.apache.derby.shared.common.reference の説明

Java コンパイラがインライン化する便利な定数。プリミティブまたは文字列定数を含む参照インターフェイスのコレクション。このような定数は Java コンパイラによってインライン化されるため、フィールドへの参照に伴うフットプリントよりも小さいフットプリントにつながることが期待されます。インターフェースのフィールドは、自動的に public、static、final になるため、定数になります。

これらのクラスは、Derby jar ファイルと一緒に出荷する必要はありません。Jar ファイルに同梱されている場合は、定数を表すフィールドが文字列以外のオブジェクト (new Integer(1) など) であったか、最後のフィールドが計算された値であり、 Java コンパイラ。

于 2013-06-28T04:05:47.290 に答える