JDBC 探索 SQLException 分析

JDBC 探索 SQLException 分析

1. SQLExceptionの概要

JDBC を使用してデータ ソース (この記事のデータ ソースは実際に使用するデータベースを表します) と対話するときにエラーが発生すると、SQLException という例外がスローされます。 SQLException には、エラーをより正確に特定するのに役立つ次の情報が含まれています。

エラーは次のことを示します:

取得するには getMessage メソッドを使用します。

SQL状態コード

コードは 5 つの文字と数字で構成されます。コードのほとんどは ISO/ANSI および Open Group (X/Open) によって標準化されていますが、データベース ベンダー自身によって実装されているコードもいくつかあります。

getSQLState メソッドを使用して取得します。

エラーコード

SQLState とは異なり、エラー コードはデータベース プロバイダーによって定義された整数値であり、実際のエラー コードが基になるデータ ソースによって返される可能性があります。

getErrorCode メソッドを使用して取得します。

原因

例外の原因を示します。getCause メソッドを継続的に呼び出すことで、例外の根本的な原因を取得できます。

例外チェーン

複数のエラーが発生した場合、例外はこのチェーンを通じて参照されます。

取得するには、getNextException メソッドを使用します。

2. SQLException の例

パブリック静的void printSQLException(SQLException e){
  for(Throwable e :ex){
    if (e インスタンスSQLException){
      (SQLException を無視します ((SQLException)e).getSQLState()) == false) {
        e.printStackTrace(System.err);
        System.err.println("SQLState: " + ((SQLException)e).getSQLState());
        System.err.println("エラーコード: " + ((SQLException)e).getErrorCode());
        System.err.println("メッセージ: " + e.getMessage());
        スロー可能 t = ex.getCause();
        while(t != null){
          System.out.println("原因: " + t);
          t = t.getCause();
        }
      }
    }
  }
}
パブリック静的ブール値 ignoreSQLException(String sqlState){
  if(sqlState == null){
    System.out.println("SQL 状態が定義されていません");
  }
  // X0Y32: Jar ファイルはスキーマ内に既に存在します
  if (sqlState.equalsIgnoreCase("X0Y32")) {
    true を返します。
  }
  // 42Y55: テーブルはスキーマ内に既に存在します
  if(sqlState.equalsIgnoreCase("42Y55")){
    true を返します。
  }
  true を返します。
}

注: 上記のコードは [http:docs.oracle.com] (http://docs.oracle.com/javase/tutorial/jdbc/basics/sqlexception.html) から取得したものです。

3. SQL警告

SQLWarning は SQLException の非常に重要なサブクラスであり、データベース アクセス中に発生する警告を示すために使用されます。例外として、SQLWarning はアプリケーションの実行を停止するのではなく、計画どおりに何も行われていないことをユーザーに警告します。たとえば、警告では、権限を取り消す試みが失敗したことや、切断を要求中にエラーが発生した可能性があることが通知される場合があります。

SQLWarning は、Connection、Statement (PreparedStatement および CallableStatement を含む)、または ResultSet によって報告されることがあります。これらのクラスにはすべて getWarnings メソッドがあります。このメソッドを呼び出すことによってのみ、呼び出しオブジェクトで報告された最初の警告を確認できます。 getWarning が警告を返す場合は、getNextWarning メソッドを呼び出して次の警告を取得できます。文の行が実行されるたびに、前の文の行の警告がクリアされます。つまり、レポート処理から警告を取得する場合は、次の文の行が実行される前に取得する必要があります。

DataTruncation は最も一般的な警告で、SQLState コード 01004 はデータの読み取りまたは書き込み時に問題が発生したことを示します。 DataTruncation には、どの列またはパラメータ データが切り捨てられるか、切り捨てが読み取り操作または書き込み操作のどちらで行われるか、転送されるバイト数、実際に転送されるバイト数などを理解するのに役立つ多くのメソッドがあります。

4. その他の種類のSQLException

BatchUpdateException: バッチ更新操作中にエラーが発生するとスローされます。提供されたメッセージに加えて、エラーが発生する前に強制終了されたすべてのステートメントが、提供された更新カウントで強制終了されます。

SQLClientInfoException: 接続時に 1 つ以上のクライアント情報プロパティを設定できない場合にスローされます。提供される情報に加えて、設定されていないクライアント情報プロパティのリストも提供されます。

すぐ...

要約する

以上が、JDBC 探索における SQLException 解析に関するこの記事の内容のすべてです。お役に立てれば幸いです。興味のある方は、引き続きこのサイトを参照してください: 共通 JDBC インターフェースの概要、JDBC を使用してデータ アクセス オブジェクト レイヤー (DAO) を実装するコード例など。ご質問がある場合は、いつでもメッセージを残すことができます。編集者が適時に返信します。どなたでも、ディスカッションのためにメッセージを残していただけます。

以下もご興味があるかもしれません:
  • SQL Server の System.OutOfMemoryException の解決方法
  • System.Data.SqlClient.SqlException: ログインによって要求されたデータベースを開くことができません。ログインに失敗しました。
  • java.sql.SQLException: 内部エラー: 指定された入力から Datum を構築できません

<<:  純粋なJSを使用してセカンダリメニュー効果を実現します

>>:  VMware12.0 インストール Ubuntu14.04 LTS チュートリアル

推薦する

Vue ページをリフレッシュするために provide と injection を適用する

目次方法1: 関数を直接呼び出す方法2: provide / inject (静的更新) を使用する...

VueはOpenLayersを使用してTiandi MapとAmapを読み込み

目次1. 世界地図1. VueにOpenLayersをインストールする2. アマップ1. 世界地図1...

MySQL のインデックスの原理とクエリの最適化の詳細な説明

目次1. はじめに1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 2...

nginx を使用してブルーグリーン デプロイメントをシミュレートする方法

この記事では、ブルーグリーン デプロイメントと、nginx を使用してブルーグリーン デプロイメント...

MySQL スロークエリログの詳細な理解

目次スロークエリログとは何ですか?スロークエリを有効にする方法ログ分析ツール mysqldumpsh...

Linux/CentOS システムでネットワーク時間を同期する 2 つの方法の詳細な説明

ハードウェア上の理由により、機械は標準時間にある程度追いつけない場合があり、その誤差は 1 か月で数...

line-height=height要素の高さだがテキストが垂直方向に中央揃えされない問題を解決する

まず、行の高さが要素の高さと等しい場合にテキストが垂直方向に中央揃えにならない理由を説明します。実際...

MySQL 8.0.16 圧縮版のダウンロードと Win10 システムへのインストール チュートリアル

公式サイトからダウンロード: https://www.mysql.com MySQLの公式サイトにア...

Linux インストール Redis 実装プロセスとエラー解決

今日、redis をインストールしたところ、今までになかったいくつかのエラーが発生しました。ここで記...

MySQL マルチテーブルクエリ例の詳しい解説 [リンククエリ、サブクエリなど]

この記事では、例を挙げて MySQL のマルチテーブル クエリについて説明します。ご参考までに、詳細...

WindowsにOpenSSHをインストールし、SSHキーを生成してLinuxサーバーにログインします。

SSH の正式名称は Secure SHell です。 SSH を使用すると、送信されるすべてのデ...

Vue-router プログラムナビゲーションの 2 つの実装コード

ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...

Linux で一般的なソフトウェアを設定する方法

新しいLinuxサーバーを入手する場合、通常は次の5つの構成を実行する必要があります。 HOSTAN...

MySQL 接続失敗の一般的な障害と原因

==================================================...

Centos7でglibcをアップグレードするとシステム異常(起動できない)になる場合の解決方法

目次問題の原因:解決:解決:私は Centos7 を使用しています (理論的にはこの方法は Cent...