HHH000231:模式导出不成功:java.sql.SQLException:找不到适合 jdbc:postgresql 的驱动程序

Posted

技术标签:

【中文标题】HHH000231:模式导出不成功:java.sql.SQLException:找不到适合 jdbc:postgresql 的驱动程序【英文标题】:HHH000231: Schema export unsuccessful: java.sql.SQLException: No suitable driver found for jdbc:postgresql 【发布时间】:2014-01-27 09:21:24 【问题描述】:

我尝试在 jboss 开发工作室 IDE 中运行我的第一个 Hibernate 和 Jboss AS-7。所以我从一个简单的例子开始,经过一周的努力,现在我可以说我对以下错误一无所知(我使用 postgresql 作为数据库)

堆栈跟踪是:

12:18:14,080 WARN  [org.hibernate.engine.jdbc.internal.JdbcServicesImpl] (http--0.0.0.0-8080-1) HHH000342: Could not obtain connection to query metadata : No suitable driver found for jdbc:postgresql://localhost:5432/postgres
12:18:14,081 INFO  [org.hibernate.dialect.Dialect] (http--0.0.0.0-8080-1) HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
12:18:14,081 INFO  [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (http--0.0.0.0-8080-1) HHH000422: Disabling contextual LOB creation as connection was null
12:18:14,082 INFO  [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] (http--0.0.0.0-8080-1) HHH000399: Using default transaction strategy (direct JDBC transactions)
12:18:14,083 INFO  [org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory] (http--0.0.0.0-8080-1) HHH000397: Using ASTQueryTranslatorFactory
12:18:14,088 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (http--0.0.0.0-8080-1) HHH000227: Running hbm2ddl schema export
12:18:14,088 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (http--0.0.0.0-8080-1) HHH000231: Schema export unsuccessful: java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432/postgres

================================================ ==============================

我的 hibernate.cfg.xml 是:

<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration SYSTEM "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
  <property name="hibernate.connection.password">amir</property>
  <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/postgres</property>
  <property name="hibernate.connection.username">postgres</property>
  <!-- JDBC connection pool (use the built-in) -->
  <property name="connection.pool_size">1</property>
  <!-- SQL dialect -->
  <property name="dialect">org.hibernate.dialect.H2Dialect</property>
  <!-- Disable the second-level cache  -->
  <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
  <!-- Echo all executed SQL to stdout -->
  <property name="show_sql">true</property>
  <!-- Drop and re-create the database schema on startup -->
  <property name="hbm2ddl.auto">create</property>
  <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
  <property name="hibernate.listeners.envers.autoRegister">false</property> 

 </session-factory>

我的 persistence.xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence 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" 
             version="2.0">

   <persistence-unit name="Hiber_test" transaction-type="JTA">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/Hiber_testDatasource</jta-data-source>
       <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
        <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/postgres"/>
        <property name="hibernate.connection.username" value="postgres"/>
        <property name="hibernate.connection.password" value="amir"/>
        <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>

         <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/Hiber_testEntityManagerFactory"/>
      </properties>
   </persistence-unit>

</persistence>

================================================ ============================== 我的java程序是:

try 
          Class.forName("org.postgresql.Driver");
          //on classpath
         catch(ClassNotFoundException e) 
          // not on classpath
            System.out.println("KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK" + e);
        


        Configuration cfg = new Configuration()
        .addResource("Event.hbm.xml").configure();

        SessionFactory sessions = cfg.buildSessionFactory();

        Session session = sessions.openSession();

================================================ ===============================

我非常感谢任何可以帮助我解决这个问题的人。``

【问题讨论】:

顺便说一句,我使用的是 Hibernate 4.3.1 和 postgresql 9.3 检查你的类路径中是否有带有驱动程序的postgres jar 添加postgres jar就可以搞定了 是的,我可以通过在 jboss 开发工作室中检查此路径来确认 postgresql-9.3-1100.jdbc4.jar 在我的类路径中:系统选项卡>首选项>服务器>运行时环境>默认类路径 参见[这篇文章][1],它解释了如何使用驱动程序创建 JBoss 模块。 [1]:***.com/questions/12403428/… 【参考方案1】:

问题解决了。

我的做法如下:

1- 因为我正在使用 jdk 1.7 实现我的应用程序,所以我必须为此链接使用合适的 postgresql 驱动程序:http://jdbc.postgresql.org/download.html(它应该是 JDBC41 Postgresql 驱动程序版本 9.3-1100 而不是 JDBC4 Postgresql 驱动程序版本 9.3-1100 )

2- StephaneM 为我指出了在 jboss AS-7 中手动配置 jdbc 驱动程序的正确方向,但不必在这里制作 module.xml --> $JBOSS_HOME/modules/org/postgresql/main 而是应该执行以下操作:

3- 将 jdbc sql jar 添加到: ~\jboss7\modules\org\hibernate\main

4-在那里修改module.xml并将&lt;resource-root&gt;更改为&lt;resource-root path="JDBC41 Postgresql Driver Version 9.3-1100"/&gt;

5- 不要忘记将 JDBC41 Postgresql 驱动程序版本 9.3-1100.jar 复制到那里。

就是这样。 :)

【讨论】:

【参考方案2】:

您不应编辑来自 JBoss 的模块。由于您使用 JPA 和 persistence.xml,因此不需要 hibernate.cfg.xml。由于您使用数据源(这很好),您可以在standalone.xml 中配置connection.url、connection.username 和connection.password。在 persistence.xml 中不需要这些属性。

需要在standalone.xml中配置数据源:

        <subsystem xmlns="urn:jboss:domain:datasources:1.1">
        <datasources>
            <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                <driver>h2</driver>
                <security>
                    <user-name>sa</user-name>
                    <password>sa</password>
                </security>
            </datasource>
            <datasource jndi-name="java:/Hiber_testDatasource" pool-name="bookingDatasource" enabled="true">
                <connection-url>jdbc:postgresql://localhost:5432/postgres</connection-url>
                <driver>postgresql</driver>
                <security>
                    <user-name>postgres</user-name>
                    <password>amir</password>
                </security>
            </datasource>
            <drivers>
                <driver name="h2" module="com.h2database.h2">
                    <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                </driver>
                <driver name="postgresql" module="org.postgresql.jdbc">
                    <xa-datasource-class>org.postgresql.Driver</xa-datasource-class>
                </driver>
            </drivers>
        </datasources>
    </subsystem>

然后在 $JBOSS_HOME/modules/org/postgresql/jdbc/main 中使用 modules.xml 创建一个新模块:

<module xmlns="urn:jboss:module:1.1" name="org.postgresql.jdbc">

    <resources>
        <resource-root path="postgresql-9.1-901.jdbc4.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>

您也可以部署驱动程序而不是创建模块,但我通常使用模块。

【讨论】:

以上是关于HHH000231:模式导出不成功:java.sql.SQLException:找不到适合 jdbc:postgresql 的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

Grails 抛出错误 hbm2ddl.SchemaExport - HHH000389:不成功

工厂模式--摆脱你日复一日new对象却依旧单身的苦恼!

设计模式--工厂模式

JavaScript | 对象和继承

BCP 导出数据的问题 老是不成功 SQL2005

用ajax调用以response输出到客户端导出excel不成功,不报错也不提示下载