0
       Connection con;
       PreparedStatement ps,p2;


       try
       {
           sqlquery = "...";
           ps=con.prepareStatement(sqlquery);
           ps.executeUpdate();

          // using ps2...some similar process.......
       }
       catch(SQLException sqlex)
       {
              System.out.print(sqlex.getMessage());
       }

私はそうであるかどうか疑問を持っています

Is it possible to find out the cause of the specific error made out by a query or update such that i can handle the situation other than just displaying the error message at output console (as here) displaying the cause ?

たとえば、pspreparedStatementが重複エントリのためにミスをした場合やpsが外部キーの問題などのために発生した場合、SQLエラーを具体的に分析できるはずです。using SQLException object出力コンソールにエラーメッセージを表示するだけでなく、それに応じて処理できるようにします

これが必要な理由は、ユーザーがGUIシナリオ(ここではJava Swingの場合)でSQLExceptionインスタンスを分析してインタラクティブな方法で作成したエラーエントリを表示したいためです。

In short , how to classify errors using a single SQLException instance

この質問が曖昧または愚かであるとわかったら申し訳ありません..!!!

4

3 に答える 3

3

私の理解が正しければ、 classのメソッドgetSQLStateとメソッドが必要です。getErrorCodeSQLException

詳細については、こちらをご覧ください。

これが役立つことを願っています!

于 2012-07-07T11:21:28.060 に答える
2

がスローされるSQLExceptionと、インスタンスから関連するメソッドを使用して、エラー状態、エラー コード、および特定のメッセージをキャプチャできSQLExceptionます。

  1. getErrorCode()
  2. getSQLState()
  3. getMessage()そして例外の共通点。

MySQL はさまざまな一般的なエラーと問題を
付録 C. エラー、エラー コード、および一般的な問題で文書化しており、これらをコードで使用し、それに応じて処理する必要がありますjava

Vincenzo Maggioが彼の回答で言及したように、エラー状態とコードに基づいてSQL 例外を処理できます。

これらのエラー状態、コードは、異なるデータベース実装では同じではない可能性があることに注意してください。
接頭辞が ORA のさまざまな Oracle エラー コードは、こちらで確認できます。

于 2012-07-07T11:45:22.243 に答える
1

この問題を解決する最も簡単な方法は、getErrorCode() を使用してエラー コード (例: 1045) を取得し、事前に定義した (ファイル内またはハードコード化された) ユーザー可読メッセージへのコードの定義済みマッピングに基づいて取得することだと思います。 ) わかりやすいメッセージを返します。

一般的な解決策は、getMessage() によって返されたメッセージを解析することですが、DBMS によってスローされる例外に対して明確に定義された文法があるとは思わないため、そのような解決策は実行可能/実装可能ではありません。

于 2012-07-07T11:22:35.763 に答える