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を使用する方法

推薦する

Windows での MySQL 8.0.11 インストール チュートリアル

この記事は、WindowsでのMySQL 8.0.11のインストールチュートリアルを記録しています。...

Nginx は動的と静的の分離を実装します 例の説明

ウェブサイトの解析を高速化するために、動的ページと静的ページを異なるサーバーで解析して、解析速度を向...

MySQL 5.7.17 でパスワードを忘れた場合の対処方法

1. my.iniファイルにskip-grant-tablesを追加し、MySQLサーバーを再起動し...

VMware仮想マシンでのLinuxのコピー&ペーストの詳細な説明

1. VMware Workstation 上の Linux: 1. ソースの更新(オプション) v...

Enterキーを押すとフォームが自動的に送信されます。予期せぬ発見

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

MySQL 外部キー制約の無効化と有効化コマンド

MySQL 外部キー制約の無効化と有効化: MySQL 外部キー制約が有効になっているかどうかは、グ...

行の高さと垂直方向の配置についての深い理解

いくつかの概念行ボックス: インライン ボックスを囲むボックス。1 つ以上の行ボックスが積み重ねられ...

MySQL データベース アーキテクチャの詳細

目次1. MySQL アーキテクチャ2. ネットワーク接続層3. データベースサービス層4. 接続プ...

Linux で at および cron スケジュールタスクをカスタマイズする方法

Linux システムには 2 種類のスケジュールされたタスクがあります。1 つは 1 回だけ実行され...

CSS スティッキーレイアウトを使用してヘッダーを上部に配置する方法

適用シナリオ:新しい要件の 1 つはアンケート調査を行うことですが、必然的に多くの質問が含まれ、1 ...

CSS3 のテキストとフォントの新しい設定

テキストシャドウテキストシャドウ: 水平オフセット 垂直オフセット ぼかし色互換性: IE10+ &...

Dockerイメージの読み込み原理

目次Docker イメージ鏡とは何ですか? Dockerイメージの読み込み原理コミットミラーDock...

Vue コード強調プラグインの総合的な比較と評価

目次総合的な比較アクティブの観点から機能的な観点から詳細な比較1. エース2. コードミラー3. モ...

手書きの Vue2.0 データハイジャックの例

目次1: webpackをビルドする2. データハイジャック3: まとめ1: webpackをビルド...

デザイナーが再びハマーの公式サイトに不満を述べる

昨年、この公開書簡は大ヒットし、羅永浩氏を驚かせた。今日、著者が新しい章を発表するとは思ってもみなか...