目次
現在、DB同期ツールを開発する際、オリジナルのjdbcDriverを使用してデータベースをリンクするため、コードは次のようになります。「Class.forName(this.jdbcDriver);」、ここでの構成は「"jdbcDriver":"com.mysql」です。 .cj.jdbc.Driver" " の場合、プログラムがこの行に到達すると、エラー「 java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 」が報告されます。そのとき、明らかな依存関係や設定があるにもかかわらず、なぜ対応するクラスが見つからないのか疑問に思いました。次に、この問題を解決する方法を見てみましょう。
質問
プログラムが「Class.forName(this.jdbcDriver);」に対して実行されると、次のエラーが報告されます。
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
理由
トラブルシューティング後、問題は解決され、その理由がここに直接記録されます。
-
MySQL JDBC ドライバーが見つかりません: このエラーは通常、MySQL JDBC ドライバーが適切に構成されておらず、アプリケーションにロードされていない場合に発生します。プロジェクトが正しく構成されていること、および MySQL JDBC ドライバー (mysql-connector-java.jar ファイルなど) がクラスパス上にあることを確認してください。
-
クラスパスの問題: MySQL JDBC ドライバーがクラスパスの外にある場合、または適切にアクセスできない場合にも、ClassNotFoundException が発生する可能性があります。クラスパス設定を確認し、MySQL JDBC ドライバーにアクセスして正しくロードできることを確認してください。
-
バージョンの不一致: 互換性のないバージョンの MySQL JDBC ドライバーを使用しようとすると、ClassNotFoundException が発生する場合もあります。MySQL JDBC ドライバーのバージョンがアプリケーションおよび MySQL データベースのバージョンと互換性があることを確認してください。
-
コンパイル エラー: コンパイル中に問題が発生した場合にも、ClassNotFoundException が発生します (インポート修飾子エラー、ドライバーが存在しないなど)。コンパイル前およびコンパイル中に、コードと依存関係を注意深く確認してください。
回避策には次のようなものがあります。
- MySQL JDBC ドライバーが適切に構成およびロードされていること、およびクラスパス上にあることを確認してください。
- クラスパス設定をチェックして、MySQL JDBC ドライバーにアクセスして正しくロードできることを確認します。
- MySQL JDBC ドライバーのバージョンがアプリケーションおよび MySQL データベースのバージョンと互換性があることを確認してください。
- コンパイル中にエラーがないか確認し、修正してください。
- 上記のいずれも機能しない場合は、アプリケーションと MySQL データベースのバージョンに応じた MySQL JDBC ドライバーを再ダウンロードしてインストールしてみてください。
解決
私自身のプロジェクトの理由は、「3. バージョンの不一致」の問題によるものです。調査の結果、「mysql-connector-java.jar」パッケージの 5XX 以降のバージョン パスは「com.mysql.jdbc.Driver」、6XX 以降のバージョン パスは「com.mysql.cj」であることがわかりました。 .jdbc.ドライバー」。バージョンパッケージは自分で削除できます。
この知識がお役に立てば幸いです