Java项目连接MySQL数据库遇驱动相关报错,求排查方案
解决java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydbname错误
问题背景
连接HeidiSQL创建的MySQL数据库时触发上述错误,尝试手动加载org.mariadb.jdbc.Driver时又出现ClassNotFoundException,Gradle依赖中已声明MariaDB驱动,且其他依赖可正常加载。
修正方案
1. 调整JDBC URL协议
MariaDB JDBC驱动优先识别jdbc:mariadb://前缀,原URL使用jdbc:mysql://会导致驱动无法被SPI机制自动检测到。修改URL为:
private static final String URL = "jdbc:mariadb://localhost:3306/mydbname";
2. 移除冗余的Class.forName调用
Java 6及以上版本中,JDBC驱动会通过META-INF/services/java.sql.Driver文件自动注册,无需手动调用Class.forName()。删除相关代码后,连接方法简化为:
public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USERNAME, PASSWORD); }
3. 确保依赖被正确打包(针对Shadow插件)
使用Shadow插件构建时,需执行shadowJar任务生成包含所有依赖的Fat Jar,而非默认的普通Jar。运行程序时使用:
./gradlew shadowJar java -jar build/libs/[你的项目名称]-all.jar
若在IDE中运行,需同步Gradle依赖,确认IDE的运行类路径包含mariadb-java-client库。
修正后的完整代码
package utilities; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnectionUtil { private static final String URL = "jdbc:mariadb://localhost:3306/mydbname"; private static final String USERNAME = "myUsername"; private static final String PASSWORD = "myPassword"; public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USERNAME, PASSWORD); } }
内容的提问来源于stack exchange,提问作者Marco Magnani
相关产品推荐
相关产品推荐

