我正在尝试使用 hibernate 在 MySQL 数据库中创建表,但遇到问题“无法打开 JDBC 连接以执行 DDL”。我输入了有效的连接 URL 和所需的 jar 文件,但无法创建与数据库的连接。 我搜索了许多可用的解决方案,但没有一个对我有用。请告诉我我在这里做错了什么。
hibernate 版本:hibernate-core-5.4.12.Final
MySQL 连接器:8.0.17
DBconn.java
public class Dbconn {
static Connection con=null;
public static Connection connect() throws ClassNotFoundException, SQLException
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/maxigodb","root","root");
//System.out.println("db connected");
return con;
}
}
HbConnection.java
public class HbConnection {
static Session ses=null;
public static Session getSession()
{
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();
SessionFactory factory = meta.getSessionFactoryBuilder().build();
ses = factory.openSession();
return ses;
}
}
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name= "hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/maxigodb</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="com.maxico.pojo.Login_data"/>
<mapping class="com.maxico.pojo.Agent_data"/>
<mapping class="com.maxico.pojo.Hotel_data"/>
<mapping class="com.maxico.pojo.HotelBooking_Details"/>
</session-factory>
控制台错误
WARN: HHH030006: Exception occurred when closing the Proxool pool
java.lang.NullPointerException
at org.hibernate.proxool.internal.ProxoolConnectionProvider.stop(ProxoolConnectionProvider.java:233)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.stopService(AbstractServiceRegistryImpl.java:390)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.destroy(AbstractServiceRegistryImpl.java:373)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.destroy(StandardServiceRegistryImpl.java:129)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.deRegisterChild(AbstractServiceRegistryImpl.java:423)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468)
at com.maxico.test.HbConnection.getSession(HbConnection.java:20)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:303)
Feb 27, 2020 12:07:39 PM org.hibernate.service.internal.AbstractServiceRegistryImpl stopService
INFO: HHH000369: Error stopping service [class org.hibernate.proxool.internal.ProxoolConnectionProvider]
org.hibernate.HibernateException: HHH030006: Exception occurred when closing the Proxool pool
at org.hibernate.proxool.internal.ProxoolConnectionProvider.stop(ProxoolConnectionProvider.java:241)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.stopService(AbstractServiceRegistryImpl.java:390)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.destroy(AbstractServiceRegistryImpl.java:373)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.destroy(StandardServiceRegistryImpl.java:129)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.deRegisterChild(AbstractServiceRegistryImpl.java:423)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468)
at com.maxico.test.HbConnection.getSession(HbConnection.java:20)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:303)
Caused by: java.lang.NullPointerException
at org.hibernate.proxool.internal.ProxoolConnectionProvider.stop(ProxoolConnectionProvider.java:233)
... 39 more
Feb 27, 2020 12:07:39 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [/Maxico] threw exception [An exception occurred processing [index.jsp] at line [182]
181: Session ses= null;
182: ses= HbConnection.getSession();
183: System.out.println("Email:" +user);
184: try {
185:
Stacktrace:] with root cause
java.sql.SQLException: The url cannot be null
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:660)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:251)
at org.hibernate.proxool.internal.ProxoolConnectionProvider.getConnection(ProxoolConnectionProvider.java:69)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180)
at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:43)
at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.getTablesInformation(DatabaseInformationImpl.java:120)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)
JAR 文件
最佳答案
我解决了这个问题...
出现这个问题是因为我添加了两个jar文件hibernate-proxool-5.4.12.Final和proxool-0.8.3。 我删除了 hibernate-proxool-5.4.12.Final,之后我就能够建立与数据库的连接。
关于java - org.hibernate.exception.JDBCConnectionException : Unable to open JDBC Connection for DDL execution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60427768/