为了账号安全,请及时绑定邮箱和手机立即绑定

java.lang.ClassCastException:无法将类 com.mysql

java.lang.ClassCastException:无法将类 com.mysql

德玛西亚99 2023-09-06 17:04:00
我正在尝试为我的学校项目设置微服务。我正在使用java spring boot框架。但是当我编译并运行数据库连接时,它给了我错误: java.lang.ClassCastException: class com.mysql.cj.jdbc.ConnectionImpl 无法转换为 class com.hrms.employees.db.Connection (com.mysql. cj.jdbc.ConnectionImpl 和 com.hrms.employees.db.Connection 位于加载程序“app”的未命名模块中)package com.hrms.employees.db;import java.sql.DriverManager;import java.sql.SQLException;public class Connection {    private static Connection conn;    static{        try {            Class.forName("com.mysql.jdbc.Driver");            conn = (Connection) DriverManager.getConnection("jdbc:mysql://itsatest2.c45g5gg8tx2m.ap-southeast-1.rds.amazonaws.com","admin","zx55774463");            System.out.println("connected");        }        catch(ClassNotFoundException | SQLException e){            System.out.println(e.getMessage());        }    }    public static Connection getConnection(){        return conn;    }}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”
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

问题是你的类被调用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,并仅为一个工作单元获取连接,然后将其关闭(这会将其返回到池中以供重用)。


查看完整回答
反对 回复 2023-09-06
  • 1 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信