java.lang.ClassCastException:class com.mysql.cj.jdbc.ConnectionImpl无法转换为

java.lang.ClassCastException:class com.mysql.cj.jdbc.ConnectionImpl无法转换为,java,mysql,jdbc,Java,Mysql,Jdbc,我正在尝试为我的学校项目建立微服务。 我使用的是JavaSpring引导框架。 但当我编译并运行DB CONNECTION时,它给了我一个错误: java.lang.ClassCastException:com.mysql.cj.jdbc.ConnectionImpl类不能强制转换为com.hrms.employees.db.Connection类(com.mysql.cj.jdbc.ConnectionImpl和com.hrms.employees.db.Connection在加载器“app”

我正在尝试为我的学校项目建立微服务。 我使用的是JavaSpring引导框架。 但当我编译并运行DB CONNECTION时,它给了我一个错误: java.lang.ClassCastException:com.mysql.cj.jdbc.ConnectionImpl类不能强制转换为com.hrms.employees.db.Connection类(com.mysql.cj.jdbc.ConnectionImpl和com.hrms.employees.db.Connection在加载器“app”的未命名模块中)

grade.build中的依赖关系

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.15'
}

我希望输出字符串为“connected”

问题是您的类被调用为
Connection
,而
DriverManager.getConnection()
返回一个
java.sql.Connection
。使用MySQL Connector/J时,实际返回的实现是
com.MySQL.cj.jdbc.ConnectionImpl
,这显然不是类
com.hrms.employees.db.Connection
,因此强制转换失败

您需要重命名类,或者需要将变量定义为
private static java.sql.Connection conn
,并删除强制转换(因此使用
conn=DriverManager.getConnection

另一方面,为数据库连接使用静态变量几乎总是错误的解决方案,在长时间运行的应用程序中,当连接关闭或丢失时,它可能会导致问题,在高度并发的应用程序中,这会导致在多个线程之间共享一个连接,这可能导致争用条件或其他难以诊断的错误


更好的解决方案是使用连接池数据源,如Apache DBCP、c3p0或HikariCP,并仅为一个工作单元获取连接,然后将其关闭(这会将其返回到池中以供重用)。

您已将类命名为
连接,您应该重命名类并导入java.sql.Connection
。此外,您还可以删除
类.forName
部分。
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.15'
}