学习Hibernate启动程序报错:驱动管理器未初始化导致无法获取连接
Hibernate启动报错:Cannot get a connection as the driver manager is not properly initialized
启动程序时抛出以下异常:
java.lang.IllegalStateException: Cannot get a connection as the driver manager is not properly initialized
报错栈信息:
at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:172) at net.codejava.hibernate.VueloManager.setup(VueloManager.java:15) at net.codejava.hibernate.VueloManager.main(VueloManager.java:54)
我的hibernate.cfg.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://127.0.0.1:3306/vuelos_lite</property> <property name="connection.username">root</property> <property name="connection.password"></property> <property name="show_sql">true</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <mapping class="net.codejava.hibernate.Vuelo" /> <mapping class="net.codejava.hibernate.Pasajero" /> <mapping class="net.codejava.hibernate.Pasaje" /> </session-factory> </hibernate-configuration>
主类VueloManager代码:
public class VueloManager { protected SessionFactory sessionFactory; protected void setup() { final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build(); try { sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory(); } catch (Exception ex) { StandardServiceRegistryBuilder.destroy(registry); } } protected void read() { Session session = sessionFactory.openSession(); String identificadorId = "BRU-2222"; Vuelo vuelo = session.get(Vuelo.class, identificadorId); System.out.println("Id: " + vuelo.getIdentificador()); System.out.println("Fecha: " + vuelo.getDate()); System.out.println("Tipo Vuelo: " + vuelo.getTipo_vuelo()); exit(); } public static void main(String[] args) { VueloManager manager = new VueloManager(); manager.setup(); //manager.read(); manager.exit(); } }
我已检查连接配置确认无误,但仍出现该错误,求解决方法。
解决方向
1. 修正MySQL驱动与URL配置
如果使用MySQL 8.0+版本,com.mysql.jdbc.Driver已被弃用,需替换为com.mysql.cj.jdbc.Driver,同时URL需添加时区参数:
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://127.0.0.1:3306/vuelos_lite?serverTimezone=UTC</property>
2. 确认驱动依赖已正确引入
- Maven项目需在
pom.xml中添加依赖:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 匹配你的MySQL版本 --> </dependency> - 手动管理jar包的项目,确保驱动jar已放入
lib目录并被IDE识别。
3. 验证数据库连接可用性
用数据库客户端(如MySQL Workbench)测试连接参数:127.0.0.1:3306、用户名root、空密码,确认能正常连接到vuelos_lite库;同时检查MySQL服务是否启动、端口3306是否被占用。
4. 完善异常排查信息
当前setup()方法捕获异常后未打印详情,无法定位具体错误,修改代码添加日志:
protected void setup() { final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build(); try { sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory(); } catch (Exception ex) { ex.printStackTrace(); // 打印完整异常栈 StandardServiceRegistryBuilder.destroy(registry); } }
运行后查看控制台输出,能精准定位问题根源。
5. 检查配置文件路径与Hibernate版本兼容性
确保hibernate.cfg.xml放在类路径根目录(Maven项目为src/main/resources);若使用Hibernate 5.x+,可尝试移除DOCTYPE声明,改用自动配置逻辑。
内容的提问来源于stack exchange,提问作者Angel
相关产品推荐
相关产品推荐

