Hibernate3,PostgreSQL 8.3和Java 5的“没有合适的驱动程序”问题

时间:2008-11-07 19:04:10

标签: java hibernate postgresql

有人知道这里发生了什么:

我在Mac OS X上对PostgreSQL 8.3(通过fink安装)数据库运行hibernate 3.2.6。当我使用Java 6和JDBC 4驱动程序(postgresql-8.3-603.jdbc4)时,设置工作正常。但是,我需要这些东西来使用Java 5和(因此)JDBC 3(postgresql-8.3-603.jdbc3)。当我在类路径中更改jar并切换到Java 5(我在eclipse中这样做)时,我收到以下错误:

Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Cannot open connection
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)
<Rows clipped for readability>
Caused by: java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getConnection(DriverManager.java:545)
    at java.sql.DriverManager.getConnection(DriverManager.java:140)
    at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)

这里有什么问题?我看不到。这是我的hibernate配置:

<hibernate-configuration>

    <session-factory>
        <property name="connection.url">jdbc:postgresql:test</property>
        <property name="connection.username">postgres</property>
        <property name="connection.password">p</property>
        <property name="connection.pool_size">1</property>
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <mapping resource="com/mydomain/MyClass.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

编辑:更长,更常见的连接网址形式: jdbc:postgresql:// localhost / test 具有完全相同的行为。

驱动程序jar肯定在类路径中,我也无法通过这个直接的JDBC测试代码获得任何错误:

public static void main(String[] args) throws Exception {
  Class.forName("org.postgresql.Driver");  
  Connection con=DriverManager.getConnection("jdbc:postgresql://localhost/test","postgres", "p");
}

5 个答案:

答案 0 :(得分:4)

我没有看到你在Hibernate配置中指定驱动程序类。尝试添加以下内容:

<hibernate-configuration>
    <session-factory>
        .
        .
        <property name="connection.driver_class">org.postgresql.Driver</property>
        .
    </session-factory>
</hibernate-configuration>

答案 1 :(得分:1)

您是否注意到连接网址不完整

<property name="connection.url">jdbc:postgresql:test</property>

而不是

<property name="connection.url">jdbc:postgresql://localhost/test</property>

答案 2 :(得分:1)

你说“使用Java 5和(因此)JDBC 3(postgresql-8.3-603.jdbc3)。”也许这是一个错误的假设。

download page对我来说很困惑。这似乎意味着对于Java 1.5,你需要JDBC3,但它并不是100%清晰。我不确定为什么JDBC4驱动程序不能与Java 1.5一起使用(我们在Java 1.5中使用DB2 JDBC4驱动程序)。

您是否尝试过使用Java 1.5的JDBC4驱动程序?

答案 3 :(得分:1)

新的JDBC4功能之一是通过服务提供商机制自动加载。通过在jar文件中包含META-INF / services / java.sql.Driver文件,不再需要执行Class.forName(“”)。这仅适用于1.6 JVM。

答案 4 :(得分:1)

我遇到了同样的问题“找不到合适的驱动程序”使用servlet注册驱动程序的解决方案是:

Class driverClass = Class.forName("org.postgresql.Driver");
DriverManager.registerDriver((Driver) driverClass.newInstance());

在这里找到解决方案:

http://www.java2s.com/Tutorial/Java/0340__Database/DriverManagergetDriversenumeratealltheloadedJDBCdrivers.htm

http://codingexplorer.wordpress.com/2009/09/06/%E2%80%9Cno-suitable-driver%E2%80%9D-for-postgresql/