目录
问题
原因
解决
今天在开发一个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.Driver” 。我自己将版本的包删除掉就可以了。
希望这个知识点可以帮助到大家