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 ダイナミック バインディング アイコンの完全な手順

推薦する

ウェブサイトのユーザビリティを向上させる10のヒント

企業の Web サイト、個人のブログ、ショッピング Web サイト、ゲーム Web サイトなど、どの...

MySQL 4 の一般的なマスタースレーブレプリケーションアーキテクチャ

目次1つのマスターと複数のスレーブのレプリケーションアーキテクチャマルチレベルレプリケーションアーキ...

HTML テーブル マークアップ チュートリアル (42): テーブル ヘッダーの水平方向の配置属性 ALIGN

水平方向では、テーブル ヘッダーの配置を左、中央、右に設定できます。基本的な構文<TH ALI...

MySQL データベースの最適化: インデックスの実装原則と使用状況の分析

この記事では、例を使用して、MySQL データベースの最適化のためのインデックス実装の原則と使用方法...

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

目次1. Dockerコンサルの概要2. nginxとconsulをベースにした自動検出と高可用性の...

vscode dockerプラグインのdocker.socket権限問題を解決する

解決策: システム内のすべての .vscode 関連プロセスを終了します (または、remote-s...

MySQL 30軍事ルールの詳細な説明

1. 基本仕様(1)InnoDBストレージエンジンを使用する必要があります。解釈:トランザクション、...

JavaScript スネーク実装コード

この記事の例では、参考までに貪欲なスネークを実装するためのJavaScriptの具体的なコードを共有...

WeChatアプレットの手動および自動追跡の実装の詳細説明(Taro)

どの企業もユーザーベースを拡大したいのであれば、ユーザーの操作データを収集・分析する必要があり、その...

MySQL分離の使用手順を読む

現在のトランザクションはどの履歴バージョンを読み取ることができますか?読み取りビューは、トランザクシ...

ノードをMySQLデータベースに接続する際に発生する問題と解決策

今日、MySQL の新しいバージョン (8.0.21) をインストールしましたが、ノード フレームワ...

仮想スクロールを簡単に実装するためのVueサンプルコード

目次序文ローリング原理成し遂げるソースコード参照する序文モバイル Web ページの日常的な開発では、...

vue3 学習ノートにおける axios の使用の変更の概要

目次1. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...

MySQL 集計関数のネストされた使用操作

目的: MySQL 集計関数のネストされた使用集計関数は直接ネストできません。例: max(coun...

Linux で LVGL エミュレータをコンパイルする際のエラーの解決方法

目次1. エラー現象2. エラー分析3. エラー解決1. エラー現象仮想マシンでLVGLエミュレータ...