teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

誤記修正

2021/05/12 04:56

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -1,15 +1,13 @@
1
1
  主キー(プライマリキー)が重複してのINSERTを`executeUpdate`で実行した場合、ご提示のコードのように`SQLException`が`throw`されているはずですが、そこでエラーコードを取得するために使っている`SQLException#getErrorCode()`が返す値は、**ベンダー固有**のものです。
2
2
 
3
- int errorCode = se.getErrorCode();
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
- ここで「**ベンダー固有**」とは何かとうと、その製品を開発、提供している会社などの組織を指します。要は、お使いのPostgreSQLというRDBMS製品を提供しているところが独自に定義したエラーコードということになります。JDBCで提供されるドライバーはPostgreSQL用だけでなく、Oracle Database、MySQL、Microsoft SQL Serverなどたくさんのものがあり、それぞれのシステム固有のエラー含まれるので、エラーコードはそれぞれ違います。そのエラーコード毎に何かしら処理を行いたいのであれば、該当のRDBMSのリファレンスにあたらなければ分かりません。例えばPostgreSQLの9.5.25で言えば、以下がそれに該当するはずです。
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`に関する公式のリファレンスを改めてあたってみてください。