如何解决Java JDBC连接MySQL时的No suitable driver错误?
问题:如何解决JDBC连接MySQL时的"No suitable driver found"错误?
我正在开发一个用JDBC连接数据库的Java应用,折腾一周还是反复出现下面的错误,我是Java和JDBC的新手:
java.sql.SQLException: No suitable driver found for "jdbc:mysql://localhost:3306/mysql" at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:270) at com.java.r2pgdm.InputConnection.Connect(InputConnection.java:32) at com.java.r2pgdm.InputConnection.<init>(InputConnection.java:26) at com.java.r2pgdm.App.main(App.java:23) Exception in thread "main" java.lang.NullPointerException at com.java.r2pgdm.InputConnection.GetMetaData(InputConnection.java:42) at com.java.r2pgdm.InputConnection.<init>(InputConnection.java:27) at com.java.r2pgdm.App.main(App.java:23)
系统环境:Ubuntu 20.04;Java 1.8;MySQL 8.0.33
已做的操作:
- 安装并启动了MySQL 8.0.33,进程监听情况如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 258 systemd-resolve 13u IPv4 12197628 0t0 TCP 127.0.0.53:53 (LISTEN) sshd 317 root 3u IPv4 12189367 0t0 TCP *:22 (LISTEN) mysqld 1838279 mysql 21u IPv6 205389761 0t0 TCP *:33060 (LISTEN) mysqld 1838279 mysql 23u IPv6 205389764 0t0 TCP *:3306 (LISTEN) java 2863309 ubuntu 308u IPv6 75294475 0t0 TCP 10.15.5.184:7077 (LISTEN) java 2863309 ubuntu 310u IPv6 75281272 0t0 TCP *:8080 (LISTEN)
- 把
mysql-connector-j-8.0.33.jar放到了Java应用目录里:
drwxrwxr-x 5 ubuntu ubuntu 12 Dec 1 09:39 ./ drwxrwxr-x 7 ubuntu ubuntu 16 Nov 30 19:35 ../ -rw-rw-r-- 1 ubuntu ubuntu 1771 Nov 27 15:36 .classpath -rw-rw-r-- 1 ubuntu ubuntu 2335 Nov 27 15:36 .factorypath -rw-rw-r-- 1 ubuntu ubuntu 541 Nov 27 15:36 .project drwxrwxr-x 2 ubuntu ubuntu 6 Nov 27 15:36 .settings/ -rw-rw-r-- 1 ubuntu ubuntu 179 Dec 1 09:39 config.ini -rw-rw-r-- 1 ubuntu ubuntu 2645 Dec 1 09:39 dependency-reduced-pom.xml -rw-r--r-- 1 ubuntu ubuntu 2481560 Nov 30 20:54 mysql-connector-j-8.0.33.jar -rw-rw-r-- 1 ubuntu ubuntu 3870 Nov 29 21:17 pom.xml drwxrwxr-x 4 ubuntu ubuntu 4 Nov 27 15:36 src/ drwxrwxr-x 9 ubuntu ubuntu 12 Dec 1 10:18 target/
- 在pom.xml里添加了依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
- 应用目录外还有一些.sql文件,不知道用途:
drwxrwxr-x 7 ubuntu ubuntu 16 Nov 30 19:35 ./ drwxr-xr-x 22 ubuntu ubuntu 35 Dec 1 11:18 ../ drwxrwxr-x 8 ubuntu ubuntu 13 Nov 27 15:36 .git/ -rw-rw-r-- 1 ubuntu ubuntu 342 Nov 27 15:36 .gitignore drwxrwxr-x 2 ubuntu ubuntu 4 Nov 27 15:36 .vscode/ -rw-rw-r-- 1 ubuntu ubuntu 1068 Nov 27 15:36 LICENSE -rw-rw-r-- 1 ubuntu ubuntu 1459 Nov 27 15:36 README.md -rw-rw-r-- 1 ubuntu ubuntu 1240 Nov 27 15:36 Schema-Oracle.sql -rw-rw-r-- 1 ubuntu ubuntu 1225 Nov 27 15:36 Schema.sql -rw-rw-r-- 1 ubuntu ubuntu 2645 Nov 30 11:05 dependency-reduced-pom.xml drwxrwxr-x 2 ubuntu ubuntu 4 Nov 27 15:36 exports/ drwxrwxr-x 5 ubuntu ubuntu 12 Dec 1 11:18 java-project/ -rw-rw-r-- 1 ubuntu ubuntu 348929 Nov 27 15:36 northwind.postgre.sql drwxrwxr-x 2 ubuntu ubuntu 5 Dec 1 09:24 sample_java/ -rw-rw-r-- 1 ubuntu ubuntu 586 Nov 27 15:36 script.cypher -rw-rw-r-- 1 ubuntu ubuntu 198552 Nov 27 15:36 world.sql
解决方案
一、解决"No suitable driver found"错误
这个问题核心是JDBC驱动未被正确加载到应用类路径,按以下步骤修复:
- 修正pom.xml依赖配置
MySQL 8.0之后的驱动artifactId已从mysql-connector-java改为mysql-connector-j,groupId也更新为com.mysql,把pom.xml里的依赖改成:
<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> </dependency>
修改后执行mvn clean install重新构建项目,让Maven自动下载并管理驱动。
- 确保驱动在类路径中生效
- 用IDE运行时:右键项目→Maven→Update Project,让IDE识别最新的依赖;
- 命令行运行时:启动命令要把驱动jar包加入类路径,比如:
java -cp target/your-app.jar:mysql-connector-j-8.0.33.jar com.java.r2pgdm.App
也可以用Maven的maven-shade-plugin把驱动打包到可执行jar里,避免手动处理类路径。
- 检查JDBC URL格式
代码里的URL不要带多余引号,并且MySQL 8.0建议加上时区参数避免报错,正确格式示例:
String url = "jdbc:mysql://localhost:3306/mysql?useSSL=false&serverTimezone=UTC";
- 可选:显式加载驱动类
Java 1.6后无需显式加载,但如果问题仍存在,在获取连接前添加一行代码:
Class.forName("com.mysql.cj.jdbc.Driver");
注意MySQL 8.0的驱动类是com.mysql.cj.jdbc.Driver,不是旧版的com.mysql.jdbc.Driver。
二、关于外部.sql文件的用途
这些是项目自带的数据库示例脚本,和当前JDBC连接问题无关:
Schema.sql/Schema-Oracle.sql:创建数据库表结构的脚本,后者适配Oracle数据库;northwind.postgre.sql:PostgreSQL版本的Northwind示例数据库数据导入脚本;world.sql:MySQL官方提供的世界数据库示例脚本,包含国家、城市等数据;script.cypher:Neo4j图数据库的查询脚本,用于操作图数据。
内容的提问来源于stack exchange,提问作者Neal
相关产品推荐
相关产品推荐

