MySQL例外に対する一般的な解決策をいくつか分析する

MySQL例外に対する一般的な解決策をいくつか分析する

序文

エラーは次のとおりです:

トランザクションの JDBC 接続を開けませんでした。ネストされた例外は java.sql.SQLException です: 基礎となるデータベースから接続を取得できませんでした。

このタイプのエラーについては、説明を参照してください。一言で言えば、「JDBC ドライバーが例外をスローしたため、データベースに接続できませんでした。」

1. コードによって設定されたデータベース名またはパスワードがローカルデータベースと一致していません

1.1. エラーの説明

最初の、そして最も一般的なエラーは、コードによって構成されたデータベース名またはパスワードがローカル データベースと一致しておらず、例外がスローされることです。

上図に示すように、設定ファイルでは、先頭の name 属性はデフォルトであり、変更する必要はありません。ユーザー名は通常、root です。データベース管理ソフトウェアを通じてローカル設定を直接表示できます。データベース パスワードは、ユーザーが設定します。

1.2 解決策

設定ファイルの名前とパスワードを変更します。

2. インポートされた非ローカルプロジェクトファイルがローカルデータベースのバージョンと一致しない

2.1. エラーの説明

2 番目によくあるエラー: IDE (Eclipse など) を使用してインポートされた非ローカル プロジェクト ファイルが、ローカル データベースのバージョンと一致しません。

たとえば、Eclipse プロジェクトにインポートする jar パッケージはバージョン 8.0 に依存しますが、ローカルにインストールした MySQL データベースはバージョン 5.0 なので、当然エラーが発生します。

2.2 解決策

インポートしたプロジェクトで参照ライブラリを見つけ、右クリック → ビルド パス → ビルド パスの構成... を選択します。プロジェクトが依存する 8.0 MySQL ドライバーを削除し、ローカルにインストールした 5.0 バージョンを追加します。

3. MySQL 構成の上位バージョンでドライバー パッケージをロードする際にエラーが発生しました (MySQL 8.0 を例に挙げます)

このエラーは、MySQL バージョンの更新後にドライバー パッケージが変更されたために発生します。新しいドライバー クラスは com.mysql.cj.jdbc.Driver です。

3.1. エラーの説明

エラーは次のとおりです:

クラス com.mysql.jdbc.Driver をロードしています。これは非推奨です。新しいドライバ クラスは com.mysql.cj.jdbc.Driver です。ドライバは SPI 経由で自動的に登録されるため、ドライバ クラスを手動でロードする必要は通常ありません。

エラーの説明: ドライバー クラス 'com.mysql.jdbc.Driver' は非推奨です。新しいドライバー クラスは 'com.mysql.cj.jdbc.Driver' です。ドライバーは SPI 経由で自動的に登録されるため、通常はドライバー クラスを手動でロードする必要はありません。

3.2 解決策

MySQL データベース 5.0 で使用されるドライバー クラス com.mysql.jdbc.Driver を com.mysql.cj.jdbc.Driver に変更します。ドライバーは SPI を通じて自動的に登録されるため、通常はドライバー クラスを手動でロードする必要はありません。変更された構成ファイルを次の図に示します。

<!-- データベース ドライバーをロードします -->
<プロパティ名="driverClass" 値="com.mysql.cj.jdbc.Driver"></プロパティ>

3.3. MySQLの異なるバージョンのドライバクラスを表示する方法

MySQL ドライバー クラスの場合、各バージョンを確認するときに、ドライバー jar パッケージをクリックして、ドライバーが配置されている場所を直接確認できます。たとえば、次の図に示すように、8.0 バージョンは com.mysql.cj.jdbc.Driver です。

4. データベース接続文字列の高バージョン構成エラー(タイムゾーンの問題)

注意: MySQL バージョン 6.0 以降ではタイム ゾーンを設定する必要があります。

4.1. エラーの説明

エラーは次のとおりです:

2020-01-14 00:45:30,876 エラー [DruidDataSource.java:616]: データソース初期化エラー java.sql.SQLException: サーバーのタイムゾーン値 '???ú±ê×??±??' は認識されないか、複数のタイムゾーンを表します。タイムゾーン サポートを利用する場合は、サーバーまたは JDBC ドライバー (serverTimezone 構成プロパティ経由) を構成して、より具体的なタイムゾーン値を使用する必要があります。

4.2 解決策

より具体的なタイム ゾーン値を使用するようにサーバーまたは JDBC ドライバー (serverTimezone 構成プロパティ経由) を構成することにより、タイム ゾーン サポートを活用できます。

設定ファイルは次のとおりです。

<!-- データベース接続文字列 -->
<プロパティ名="jdbcUrl" 値="jdbc:mysql://localhost:3306/demo?serverTimezone=GMT%2B8&amp;characterEncoding=utf-8"></プロパティ>

5. データベースへのデータの書き込みに 8 時間の差があるのはなぜですか?

5.1. エラーの説明

Java データベース接続では、UTC タイムゾーン (協定世界時) が使用されます (serverTimezone=UTC)。北京時間は UTC 時間より 8 時間早い (UTC+08:00) です。serverTimezone=UTC を直接使用すると、データベースに書き込まれるデータは 8 時間進みます。次の構成を使用すると、データベースに書き込まれるデータは 8 時間間隔になります。

<!-- データベース接続文字列 -->
<プロパティ名="jdbcUrl" 値="jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&amp;characterEncoding=utf-8"></プロパティ>

5.2 解決策

サーバーのタイムゾーンを北京時間 GMT%、上海時間 Asia/Shanghai、または香港時間 Hongkong に変更できます。

設定ファイルは次のとおりです。

<!-- データベース接続文字列 -->
<プロパティ名="jdbcUrl" 値="jdbc:mysql://localhost:3306/demo?serverTimezone=GMT%2B8&amp;characterEncoding=utf-8"></プロパティ>

また、MySQL の my.ini 設定ファイルも変更できます。この記事は、該当する問題を解決するためだけに使用されているため、詳細には説明しません。

6. SSL接続の問題

6.1. エラーの説明

エラーは次のとおりです:

Sun Oct 14 00:45:30 CST 2018 警告: サーバーの ID 検証なしで SSL 接続を確立することは推奨されません。MySQL 5.5.45+、5.6.26+、および 5.7.6+ の要件によると、明示的なオプションが設定されていない場合は、デフォルトで SSL 接続を確立する必要があります。SSL を使用していない既存のアプリケーションに準拠するには、verifyServerCertificate プロパティを 'false' に設定してください。useSSL=false を設定して SSL を明示的に無効にするか、useSSL=true を設定してサーバー証明書の検証用にトラストストアを提供する必要があります。

エラーの説明: サーバー認証なしで SSL 接続を確立することは推奨されません。 MySQL 5.5.45+、5.6.26+、および 5.7.6+ の SSL 接続要件によれば、接続モードが設定されていない場合は、デフォルトで SSL 接続を確立する必要があります。 SSL を使用しない既存のアプリケーションの場合、サーバーの verify-certificate プロパティは「false」に設定されます。 useSSL=false を設定して SSL を明示的に無効にするか、useSSL=true を設定してサーバーの検証済み証明書を提供する必要があります。

6.2 解決策

  • テストに適したデータベース URL 接続アドレスに useSSL = false を追加します。
  • データベース URL 接続アドレスに useSSL = true を追加し、サーバーの認証証明書を提供します。

設定ファイルは次のとおりです。

 <!-- データベース接続文字列 -->
<プロパティ名="jdbcUrl" 値="jdbc:mysql://localhost:3306/demo?useSSL=false&amp;ser​​verTimezone=GMT%2B8&amp;characterEncoding=utf-8"></プロパティ>

要約する

MySQL 例外に対する一般的な解決策をいくつかまとめることで、基礎となる MySQL の理解を深めることができます。開発をしている限り、ミスは絶えず起こるので、まとめるのが上手でなければなりません。同時に、開発の基本原則を完全に理解し、開発者としてさまざまなバージョンの反復に遅れずについていく必要があります。そうしないと、技術の発展に追いつくことはできません。

上記は、MySQL 例外に対するいくつかの一般的な解決策の詳細な分析です。MySQL 例外の解決策の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL リンクを表示し、異常なリンクを削除する方法
  • MySQLがbinlogファイルを手動で登録し、マスタースレーブ異常を引き起こす理由
  • MySQL データベース接続例外の概要 (収集する価値あり)
  • mysql5.7.21 の異常起動を修正する方法
  • MySQL innodb例外の修復に関する経験の共有
  • MySQLの定義と例外処理の詳細
  • MySQL ストアド プロシージャの基本的な例外処理のチュートリアル
  • MySQLの異常なクエリケースの分析
  • MySQL 例外処理の簡単な分析

<<:  Nginx は高可用性クラスタ構築を実装します (Keepalived+Haproxy+Nginx)

>>:  モバイルアダプティブスタイルで@mediaを使用する方法

推薦する

WeChatアプレットがチャットルーム機能を実現

この記事では、参考のために、WeChatアプレットのチャットルームを実装するための具体的なコードを例...

MySQL 8.0.25 解凍版のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.25解凍版のインストールチュートリアル、参考までに具体的な内容は以下のとおりです...

MySQLユーザー削除バグを解決する

著者が MySQL を使用してユーザーを追加していたところ、ユーザー名が間違って記述されていることに...

開発効率を向上させる 20 の JavaScript ヒント

目次1. 配列を宣言して初期化する2. 合計、最小値、最大値を計算する3. 文字列、数値、オブジェク...

GobangゲームのWebバージョンを実装するためのJavaScript

この記事では、GobangゲームのWebバージョンを実装するためのJavaScriptの具体的なコー...

Maxwell を使用して MySQL データをリアルタイムで同期する方法

目次マクスウェルについてMaxwellの設定と使用1. Maxwellインストールパッケージをダウン...

MySQL アカウント情報をエレガントにバックアップする方法

序文:最近、インスタンスの移行の問題に遭遇しました。データの移行後、データベースのユーザーと権限も移...

MySQL サービスとデータベース管理

目次1. サービスの開始と停止の手順1.1 Windows での MySQL 5.7 の公式 MSI...

JavaScript ステートメントの一般的な for ループの詳細な説明

JavaScript には、for、for in、for of、forEach ループなど、多くのル...

Reactソースコードにおけるビット演算について詳しく説明します

目次序文いくつかの一般的なビット操作ビットAND (&)ビットOR (|)ビット否定(~)マ...

MySQL 上級学習ノート (パート 3): MySQL 論理アーキテクチャの紹介、MySQL ストレージ エンジンの詳細な説明

MySQL 論理アーキテクチャの概要他のデータベースと比較すると、MySQL は、そのアーキテクチャ...

分散ロックの原理と3つの実装方法の詳細な説明

現在、ほぼすべての大規模な Web サイトとアプリケーションは分散方式で展開されています。分散シナリ...

同じページを動的にロードするための Vue ルーティングリスニングの例

目次シナリオ分析発達要約するシナリオ分析システムでは、1 つのモジュールに 3 つのサブモジュールが...

JavaScript はクリックして画像の形状を変更する (変換アプリケーション) を実装します。

JavaScriptをクリックすると画像の形状が変わります(変形の応用)。参考までに具体的な内容は...

HTML 選択タグにリンクを追加する 3 つの方法

最初のもの:コードをコピーコードは次のとおりです。 <html> <ヘッド>...