Проблема в том, что ваш класс называется 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, и получить соединение только для единицы работы, а затем закрыть его (что возвращает его в пул для повторного использования).