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

推薦する

適応分析と応答分析の違いを専門用語で詳しく説明

日々の開発経験と関連するオンライン情報に基づいて、アダプティブとレスポンシブの違いをシンプルでわかり...

写真とテキストによる MySQL 8.0.21 インストール チュートリアル

1. ダウンロードリンクをダウンロードするダウンロードをクリックします。Oracle アカウントにロ...

HTML テーブル マークアップ チュートリアル (37): 背景画像属性 BACKGROUND

テーブル ヘッダーの背景画像を設定します。任意の GIF または JPEG 画像ファイルを使用できま...

この構成ファイルの排他ロックに失敗したという VMware 仮想マシンのプロンプトの解決方法

VMware が異常シャットダウンした後、再起動すると「この構成ファイルを排他的にロックできませんで...

mysql indexof関数の使用手順

以下のように表示されます。 LOCATE(部分文字列、文字列)文字列 str 内の部分文字列 sub...

Linux のインスタンスにパブリック IP アドレスを割り当てる方法

説明するこのインターフェースを呼び出すときは、次の点に注意する必要があります。パブリック IP アド...

MySQL のレイテンシ問題とデータフラッシュ戦略プロセスの分析

目次1. MySQLレプリケーションプロセス2. MySQLの遅延問題の分析3. プロモーション期間...

Linux環境でglogログライブラリを使用する方法

Linuxライブラリを生成するLinux版はcentos7.3を使用し、コンパイルしてライブラリを生...

マーキー要素は、スクロールするフォントや画像などの効果を実装します。

マーキー要素を使用すると、単純なフォント(画像など)のスライドやその他の効果を実現できます。コードを...

Echarts 凡例コンポーネントのプロパティとソース コード

凡例コンポーネントは、ECharts でよく使用されるコンポーネントです。シリーズ マーカーの名前を...

幅の比率に応じて高さを変えるCSSを実装するいくつかの方法

[解決策1: パディングの実装]原理:要素の padding の値がパーセンテージの場合、このパーセ...

Vue 組み込みコンポーネントのキープアライブでの LRU アルゴリズムの使用

目次Vue の keep-alive 組み込みコンポーネントの使用でもこのアルゴリズムが使用されます...

HTMLの基礎: HTMLの基本構造

HTML ハイパーテキスト ドキュメントの基本構造は、ドキュメント ヘッダーとドキュメント本体の 2...

超大型フォントを使用した 40 の Web ページ デザイン

今日の Web デザインでは、非常に大きなフォントが表示される傾向があります。これらのオープンソース...

React Router 5.1.0 はページジャンプナビゲーションを実装するために useHistory を使用します

目次1. withRouterコンポーネントを使用する2. ルートタグを使用するReactRoute...