在Kotlin中使用java.sql.DriverManager连接MySQL失败求助
排查步骤与解决方法
1. 修正JDBC URL格式
mysql-connector-j 8.0及以上版本(包括9.0)强制要求指定时区参数,否则会触发驱动加载异常。确保URL包含serverTimezone参数,示例:
jdbc:mysql://35.194.200.2:3306/GCP?serverTimezone=UTC&useSSL=false
useSSL=false可按需添加,避免无SSL连接时的警告。
2. 确认驱动类全限定名正确
9.0版本已完全弃用旧驱动类com.mysql.jdbc.Driver,必须使用新的类名com.mysql.cj.jdbc.Driver。遇到加载问题时,可手动触发类加载(JDBC4.2+支持自动加载,但手动加载能快速排查类路径问题),代码示例:
import java.sql.DriverManager import java.sql.SQLException fun main() { val url = "jdbc:mysql://35.194.200.2:3306/GCP?serverTimezone=UTC&useSSL=false" val user = "dev" val password = "0000" try { // 手动加载驱动类 Class.forName("com.mysql.cj.jdbc.Driver") val connection = DriverManager.getConnection(url, user, password) println("数据库连接成功!") connection.close() } catch (e: ClassNotFoundException) { println("找不到MySQL驱动类:${e.message}") } catch (e: SQLException) { println("数据库连接失败:${e.message}") } }
3. 验证jar包是否在运行类路径中
- 手动添加jar的场景:检查IDE项目结构,确认jar已被添加为Library,且运行配置的Classpath中包含该jar。比如IntelliJ中右键jar选择「Add as Library」。
- 构建工具(Maven/Gradle)场景:确保依赖配置正确
Maven依赖:
Gradle(Kotlin DSL)依赖:<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>9.0.0</version> </dependency>
执行构建命令刷新依赖,确认jar已正确下载并引入。implementation("com.mysql:mysql-connector-j:9.0.0")
4. 处理Java模块系统限制(Java 9+)
如果项目使用Java模块系统(存在module-info.java),必须在模块声明中添加驱动依赖:
module your.module.name { requires mysql.connector.j; }
否则JVM无法从模块路径中识别驱动类。
5. 测试网络连通性
验证本地机器能否ping通35.194.200.2,且3306端口开放(可使用telnet 35.194.200.2 3306测试)。网络不通也可能触发「无可用驱动」的错误提示。
内容的提问来源于stack exchange,提问作者黃奕捷
相关产品推荐
相关产品推荐

