Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate-ClassNotFoundException:com.mysql.jdbc.Driver_Java_Mysql_Hibernate_Jdbc - Fatal编程技术网

Java Hibernate-ClassNotFoundException:com.mysql.jdbc.Driver

Java Hibernate-ClassNotFoundException:com.mysql.jdbc.Driver,java,mysql,hibernate,jdbc,Java,Mysql,Hibernate,Jdbc,我试图通过Hibernate从MySQL数据库中检索数据,但遇到了以下错误: Failed to create sessionFactory object.org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver com.mysql.jdbc.Driver could not be loaded java.lang.ClassNotFoundException: Could not l

我试图通过Hibernate从MySQL数据库中检索数据,但遇到了以下错误:

Failed to create sessionFactory object.org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver com.mysql.jdbc.Driver could not be loaded

java.lang.ClassNotFoundException: Could not load requested class : com.mysql.jdbc.Driver
[...]
我使用一个名为DAOFactory的类来获取hibernate会话:

public class DAOFactory {

    private static boolean isInstance = false;  
    private static SessionFactory sessionFactory;
    private static ServiceRegistry serviceRegistry; 
    private static Session session;

    private DAOFactory() throws ExceptionInInitializerError{        
        if( !isInstance ) {
            try {               
                Configuration cfg   = new Configuration().configure();              
                serviceRegistry     = new ServiceRegistryBuilder().applySettings(cfg.getProperties())
                                                .buildServiceRegistry();
                sessionFactory      = cfg.buildSessionFactory(serviceRegistry);
            } catch (Throwable ex) {
                System.err.println("Failed to create sessionFactory object."+ ex);
                throw new ExceptionInInitializerError(ex);
            }
            session = sessionFactory.openSession();         
            isInstance = true ;
        }               
    }

    public static DAOFactory getInstance() {        
        return new DAOFactory() ;
    }

    public Session getSession() {
        return session ;
    }
}
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 name="">
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/enigma</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.pool_size">1</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
    </session-factory>
</hibernate-configuration>

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/enigma
根
org.hibernate.dialogue.mysqldialogue
1.
线
org.hibernate.cache.NoCacheProvider
真的
更新
并且
mysql-connector-java-5.1.26-bin.jar
已经在类路径中:


有人知道我遗漏了什么吗?

谢谢雷默斯的回答
mysql-connector-java-5.1.26-bin.jar
需要在运行时类路径中

运行->运行配置…->Classpath->addexternaljar


清理所有内容,再试一次,异常就会消失。

对于那些使用Maven的人:在pom.xml中添加以下依赖项

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

(如果不使用IDE)。

在某些情况下,通过运行->运行配置将
jar
添加到
classpath
可能不是合适的解决方案…->Classpath->addexternaljar

第一例

jar
文件无法放入
classpath
文件夹时,有另一种方法可以从另一个地方加载类。您只需要实例化,然后对其调用
loadClass()
(前面提到过):

第二种情况

如果您想在运行时将类添加到
classpath
(我更喜欢的答案是),为此,您可以创建一个非常简单的自定义类加载器,并使用唯一重写的
addUrl
方法进行扩展:

public class DynamicURLClassLoader extends URLClassLoader {

    public DynamicURLClassLoader(URLClassLoader classLoader) {
        super(classLoader.getURLs());
    }

    @Override
    public void addURL(URL url) {
        super.addURL(url);
    }
}
然后调用它:

URLClassLoader urlCL = (URLClassLoader) ClassLoader.getSystemClassLoader();
new DynamicURLClassLoader(urlCL).addURL("path_to_jar");

mysql
mysql连接器java
8.0.15
假如
  • 我对Maven有着以上的依赖性
  • 范围标记导致了错误
  • 移除范围标签解决了这个问题

mysql-connector-java-5.1.48-bin.jar面临同样的问题。为了解决这个问题,我将驱动程序类名从

<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
com.mysql.cj.jdbc.Driver

com.mysql.jdbc.Driver

下载mysql-connector-java-8.0.20.jar 从…起 将jar添加到类路径


运行->运行配置…->Classpath->addexternaljar。

在mysql-connector-java-5.1.48-bin.JAR中遇到了同样的问题。为了解决这个问题,我将驱动程序类名从

com.mysql.cj.jdbc.Driver 到


com.mysql.jdbc.Driver

将jar添加到运行时类路径如果您正在处理web应用程序,请将mysql-connector-java-5.1.26-bin.jar放在lib文件夹下。可能重复的可能重复的可能重复的我正在处理JPA项目,前面的两个问题没有关系。但是谢谢@Reimeus,就是这样。注意6版不再支持JDK1.7了()
URLClassLoader urlCL = (URLClassLoader) ClassLoader.getSystemClassLoader();
new DynamicURLClassLoader(urlCL).addURL("path_to_jar");
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
    <scope>provided</scope> 
</dependency>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>