我正在尝试为我的学校项目设置微服务。我正在使用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,并仅为一个工作单元获取连接,然后将其关闭(这会将其返回到池中以供重用)。
添加回答
举报
0/150
提交
取消