我正在嘗試為我的學校項目設置微服務。我正在使用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
提交
取消