JDBC を使用して Mysql データベースに接続する際に発生する可能性のある問題の概要

JDBC を使用して Mysql データベースに接続する際に発生する可能性のある問題の概要

まず、いくつかの概念を明確にします。

  • JDBC: Javaデータベース接続、Oricalによって規定された標準インターフェースのセット
  • Javaデータベースドライバ: 対応するデータベースベンダーが提供するJDBC実装クラスは、ドライバを介してさまざまなデータベースを操作するために使用できます。
  • java-databaseでは、jdbc-apiのすべてのパッケージはjava.sqlまたはjavax.sqlです。

JDBC 操作手順:

(1)データベースとテーブルを作成する

(2)プロジェクトを作成する

(3)ドライバjarパッケージをインポートする

(4)ドライバーを登録する

Class.forName("com.mysql.jdbc.Driver");

(5)接続する

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:端口號/項目名", "登錄名", "密碼");

序文

最近、MySQL 8.0 データベースをインストールしましたが、プログラムで接続するときに常に問題が発生しました。以前、いくつかの問題に遭遇しました。ここでは、JDBC を使用して MySQL に接続する際に発生する可能性のある問題の概要を示します。

その前に、環境について説明させてください。

  • 開発ツール: IDEA
  • MySQL バージョン: x86_64 上の Win64 用 8.0.12 (MySQL コミュニティ サーバー - GPL)
  • mysql ドライバ パッケージ: 8.0.12

ドライバー パッケージの URL の変更

例外情報

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

理由

例外を通じて、新しいドライバー URL が com.mysql.cj.jdbc.Driver であることがわかります。オンラインで情報を調べたところ、MySQL 6 以降、ドライバー パッケージは新しいドライバー URL を使用し始めたことがわかりました。古い 5.0 バージョンのドライバー パッケージを使用する場合は、ドライバー URL を使用する必要はありませんが、古いドライバーを使用すると予期しない問題が発生する可能性があります。したがって、ドライバー パッケージをアップグレードしてから、ドライバー URL の値を変更することをお勧めします。

回避策

ドライバーの URL を com.mysql.jdbc.Driver から com.mysql.cj.jdbc.Driver に変更します。

SSL警告

警告メッセージ

サーバーの 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 を使用しない既存のアプリケーションの場合、VerifyServerCertificate プロパティは "false" に設定されます。 useSSL=false を設定して SSL を明示的に無効にするか、 useSSL=true を設定してサーバー証明書の検証用のトラストストアを提供する必要があります。

回避策

通常、開発では SSL 接続を使用する必要はありません。接続文字列の後に useSSL=false パラメータを追加するだけです。ただし、SSL 接続が本当に必要な場合は、ドライバー URL の後に useSSL=true パラメータを追加します。

jdbc:mysql://localhost:3306/dbname?characterEncoding=UTF-8&useSSL=false

タイムゾーンの問題

例外情報

java.sql.SQLException: サーバーのタイム ゾーン値 'Öйú±ê׼ʱ¼ä' は認識されないか、複数のタイム ゾーンを表します。タイム ゾーン サポートを利用する場合は、より具体的なタイム ゾーン値を使用するようにサーバーまたは JDBC ドライバー (serverTimezone 構成プロパティ経由) を構成する必要があります。

理由

また、バージョンアップ後は、新バージョンのデータベースとシステムの間にタイムゾーンの差があるため、タイムゾーンserverTimezoneを指定する必要があります。

回避策

接続文字列の後にパラメータ &serverTimezone=GMT%2B8 を追加します。最終的な接続文字列は次のようになります。

jdbc:mysql://localhost:3306/dbname?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8

データベースの時間を変更します。まずコマンドラインからデータベースに接続し、コマンドとその出力を次のように順番に入力します。

mysql> "%time_zone"のような変数を表示します。
+------------------+--------+
| 変数名 | 値 |
+------------------+--------+
| システムタイムゾーン | |
| タイムゾーン | システム |
+------------------+--------+
セットに 2 行、警告 1 回 (0.04 秒)

mysql> グローバルタイムゾーンを「+8:00」に設定します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

XML 構成ファイルでの & のエスケープ

例外情報

org.mybatis.generator.exception.XMLParserException: 16 行目の XML パーサー エラー: エンティティ "useSSL" への参照は ';' 区切り文字で終わる必要があります。

理由

これは、mybatis ジェネレーターを使用するときに発生するエラーです。当時、接続文字列の後に useSSL パラメータを追加したかったのですが、XML ファイルでは & が禁止されているため、& が必要な場合はエスケープ シンボル & に置き換える必要がありました。

回避策

接続文字列内の & 記号を & に変更します。

詳細な接続文字列リファレンス

jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&serverTimezone=GMT%2B8&verifyServerCertificate=false&autoReconnct=true&autoReconnectForPools=true&allowMultiQueries=true

もちろん、構成ファイルとして XML を使用する場合は、接続文字列内の & 記号を & に変更する必要があります。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • Java jdbcはmysqlデータベースに接続して、追加、削除、変更、クエリ操作を実装します。
  • JDBC は MySql データベースのステップに接続し、クエリ、挿入、削除、更新などを実行します。
  • JDBC を MySQL 5.7 に接続する方法
  • JSP で JDBC を使用して MYSQL データベースに接続する方法
  • Javaはjdbcを使用してデータベースツールクラスに接続し、jdbcを使用してmysqlデータに接続します。例
  • MySQLインスタンスへのJDBC接続の詳細な説明
  • mysql jdbc接続手順と共通パラメータ
  • MySQLへのJDBC接続に関する問題
  • JavaはJDBC経由でMySQLデータベースに接続します
  • JDBC 接続 (MySQL への接続) の 6 ステップのサンプル コード

<<:  Dockerでイメージをプルするための手順を完了する

>>:  Vue ダイナミック バインディング アイコンの完全な手順

推薦する

要素のフォーム要素の使用の概要

フォーム要素はたくさんあります。簡単にまとめると、次のようになります。私のやり方では、主にテキスト ...

html-webpack-plugin の使用方法の詳細な説明

最近、React プロジェクトで初めてhtml-webapck-pluginプラグインを使用しました...

NginxはIP経由の直接アクセスを禁止し、カスタム500ページにリダイレクトします

設定ファイルに直接 サーバー{ listen 80 default; # IPへの直接アクセスを禁止...

Linux Centos7 に mysql8 をインストールするチュートリアル

1. RPMバージョンのインストールデータベースの他のバージョンがあるかどうかを確認し、ある場合は完...

ハンドラー PageHandlerFactory-Integrated のモジュール リストに不正なモジュール ManagedPipelineHandler が含まれています

Web プロジェクトを開発する場合、IIS をインストールする必要があります。IIS がインストール...

マージンのマージの問題を解決する

1. 兄弟要素の余白を結合する効果は次のようになります: (2 つの間の間隔は 150 ピクセルでは...

geo モジュールを使用して Nginx でホワイトリストを設定する例

元の構成: http { ...... limit_conn_zone $binary_remote...

Docker イメージを削除できません エラー: そのようなイメージはありません: xxxxxx 解決策

序文docker イメージを削除できません。docker docker imagesを確認すると、イ...

Ubuntu 20.04でAliソースを変更する方法

なお、この記事では、単に 20.04 ソースに変更する方法を説明するのではなく、20.04 に基づい...

ウェブページでよく使用される共有コードの完全なリスト(フロントエンドに必須)

コードをコピーコードは次のとおりです。 1. 新浪微博<a href="http:/...

Zabbixのインストールと展開の詳細な説明

序文Zabbix は最も主流のオープンソース監視ソリューションの 1 つです。導入自体は難しくありま...

HTML で点線の境界線を設定する方法

CSSスタイルとHTMLタグ要素を使用するさまざまな HTML タグに点線の境界線を追加するために、...

MySQL でタイムゾーンを表示および変更する方法

今日、プログラムが間違った時刻を挿入し、フィールドがデフォルト値 CURRENT_TIMESTAMP...

mysql5.7.19 winx64 解凍版のインストールと設定のチュートリアル

mysql 5.7.19 winx64解凍版のインストールチュートリアルを収録しました。具体的な内容...

Vueのスロットの詳細な説明

Vue でのコードの再利用により、mixnis が提供されます。テンプレートの再利用により、スロット...