回答編集履歴
1
誤記修正
answer
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
主キー(プライマリキー)が重複してのINSERTを`executeUpdate`で実行した場合、ご提示のコードのように`SQLException`が`throw`されているはずですが、そこでエラーコードを取得するために使っている`SQLException#getErrorCode()`が返す値は、**ベンダー固有**のものです。
|
2
2
|
|
3
|
-
|
3
|
+
[SQLException#getErrorCode - JavaSE 8](https://docs.oracle.com/javase/jp/8/docs/api/java/sql/SQLException.html#getErrorCode--)
|
4
4
|
|
5
|
-
[SQLException - JavaSE 8](https://docs.oracle.com/javase/jp/8/docs/api/java/sql/SQLException.html)
|
6
|
-
|
7
5
|
> このSQLExceptionオブジェクトのベンダー固有の例外コードを取得します。
|
8
6
|
|
9
|
-
ここで「**ベンダー固有**」とは何かと
|
7
|
+
ここで「**ベンダー固有**」とは何かと言うと、その製品を開発、提供している会社などの組織を指します。要は、お使いのPostgreSQLというRDBMS製品を提供しているところが独自に定義したエラーコードです。JDBCのドライバーはPostgreSQL用だけでなく、Oracle Database、MySQL、Microsoft SQL Serverなどたくさんのものがあり、それぞれのシステム固有の動作もあるので、エラーコードはそれぞれ違います。そのエラーコード毎に何かしら処理を行いたいのであれば、該当のRDBMSのリファレンスにあたらなければ分かりません。例えばPostgreSQLの9.5.25で言えば、以下がそれに該当するはずです。
|
10
8
|
|
11
9
|
[Appendix A. PostgreSQL Error Codes - PostgreSQL 9.5.25 Documentation](https://www.postgresql.org/docs/9.5/errcodes-appendix.html)
|
12
10
|
|
13
|
-
主キーの重複だけでなく、NULL制約違反など様々なものがあるでしょう。実際にど
|
11
|
+
主キーの重複だけでなく、NULL制約違反など様々なものがあるでしょう。お使いのPostgreSQLのバージョンも含め、実際にどんな値が返ってくるかはご自身で確認してください。
|
14
12
|
|
15
13
|
尚、`SQLException#getSQLState`メソッドだともう少しまとまったかんじの文字列でのエラー状態を`String`で得られるようです。`SQLException`に関する公式のリファレンスを改めてあたってみてください。
|