未找到指定的 JDBC 驱动程序 com.ibm.db2.jcc.DB2Driver 类

Posted

技术标签:

【中文标题】未找到指定的 JDBC 驱动程序 com.ibm.db2.jcc.DB2Driver 类【英文标题】:Specified JDBC Driver com.ibm.db2.jcc.DB2Driver class not found 【发布时间】:2012-04-06 21:03:27 【问题描述】:

我花了相当多的时间研究并试图找出我的配置哪里出了问题,但完全卡住了。从我一直在阅读的帖子中可以看出,我的驱动程序不在类路径中。我添加了 Class.forName("com.ibm.db2.jcc.DB2Driver") 行,以确保驱动程序可用并在该行中加载。对于我可能错过的任何建议,我将不胜感激。

我的代码是:

    public class TestHibernateConfig 

    private static SessionFactory sessionFactory;

    public static void testConfig() 
        try 
            DB2Driver drvr = (DB2Driver) Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();

            Configuration cfg = new Configuration();
            cfg.configure("hibernate.cfg.xml");
            sessionFactory = cfg.buildSessionFactory();
            Session sess = sessionFactory.getCurrentSession();
            Transaction tx = sess.beginTransaction();

            Criteria crit = sess.createCriteria(ItemData.class);
            List items = crit.list();

         catch (Exception e) 
            Logger logger = Logger.getLogger("");
            logger.error(e.getMessage());
        
    

当我的代码命中时,我得到类未找到错误: sessionFactory = cfg.buildSessionFactory();

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="speed2db2">
 <property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property>
  <property name="hibernate.connection.driver_class">com.ibm.db2.jcc.DB2Driver</property>
  <property name="hibernate.connection.url">jdbc:db2://appdb:50000/MYTEST</property>
  <property name="hibernate.connection.username">myUser</property>
  <property name="hibernate.connection.password">myPass</property>
 </session-factory>
</hibernate-configuration>

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="speedPersistUnit">
        <class>ItemData</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"/>
            <property name="hibernate.connection.url" value="jdbc:db2://appdb:50000/MYTEST"/>
            <property name="hibernate.default_schema" value="MYSCHEMA"/>
            <property name="hibernate.connection.username" value="myUser"/>
            <property name="hibernate.connection.password" value="myPass"/>
            <property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2Driver"/>
        </properties>
    </persistence-unit>
</persistence>

在 Eclipse 中,我可以连接到数据库,如果我进入 Hibernate 透视图,我可以浏览数据库模式。我还可以使用 HQL 编辑器在我的班级中加载数据。

编辑:

09:35:50,338 INFO  [org.hibernate.cfg.Configuration] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000043: Configuring from resource: /com/newpig/speed2DB2/hibernate.cfg.xml
09:35:50,340 INFO  [org.hibernate.cfg.Configuration] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000040: Configuration resource: /com/newpig/speed2DB2/hibernate.cfg.xml
09:35:50,369 INFO  [org.hibernate.cfg.Configuration] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000041: Configured SessionFactory: speed2db2
09:35:52,059 INFO  [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000402: Using Hibernate built-in connection pool (not for production use!)
09:36:16,856 ERROR [] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) Specified JDBC Driver com.ibm.db2.jcc.DB2Driver class not found

错误发生在这一行。

 sessionFactory = cfg.buildSessionFactory();

部署到我的 .war 文件: .战争 |-WEB-INF ||-lib |||-db2jcc4.jar |||-hibernate-core-4.1.2.Final.jar |||-hibernate-entitymanager-4.1.2.Final.jar |||-hibernate-jpa-2.0-api-1.0.1.Final.jar

【问题讨论】:

您从哪里得到错误,您能否分享相关的堆栈跟踪或其他形式的日志? 我添加了堆栈跟踪。它确实表明正在加载配置文件。 【参考方案1】:

我认为我没有提到我正在使用 JBoss7.1。最后,我无法弄清楚为什么 Hibernate 无法加载驱动程序,但通过切换到使用 JNDI 并在 JBoss Standalone.xml 中配置数据源而不是尝试从 Hibernate 建立连接来解决它。

【讨论】:

【参考方案2】:

我认为这可能是因为 hibernate.cfg.xml 放错了地方。您应该检查它是否在您的类路径中,或者您可以尝试像这样在方法调用中添加类路径。

SessionFactory sessionFactory = new Configuration().configure(
                    "/com/mkyong/persistence/hibernate.cfg.xml")
                    .buildSessionFactory();

【讨论】:

感谢您的回复。我确实尝试移动我的配置文件并使用您显示的路径引用它。我遇到了同样的问题。您可以在我上面的编辑中看到它正在查找配置文件。我已经确认 db2jcc4.jar 位于服务器上我的 .war 的 lib 文件夹中。此外,如前所述, Class.forName() 会正确加载驱动程序。我也确认网址是正确的。

以上是关于未找到指定的 JDBC 驱动程序 com.ibm.db2.jcc.DB2Driver 类的主要内容,如果未能解决你的问题,请参考以下文章

我没有找到数据源名称并且没有指定默认驱动程序

Oracle JDBC 驱动程序 » 10.2.0.2.0 给出页面未找到 [重复]

Error 500: Could not get JDBC Connection; nested exception is com.ibm.websphere.ce.cm.

捆绑服务组合:org.sqlite.JDBC 未找到

PLC200,不知道为啥老是 提示未找到指定的访问点,请大神赐教

Pyodbc - “未找到数据源名称,未指定默认驱动程序”