繁体   English   中英

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

[英]“No suitable driver” problem with Hibernate3, PostgreSQL 8.3 and Java 5

有人知道这里发生了什么吗?

我在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-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>

编辑:连接URL的更长,更常见的形式: 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");
}

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

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

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

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

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

相对于

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

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

下载页面令我感到困惑。 似乎暗示对于Java 1.5,您需要JDBC3,但并不是100%清楚。 我不确定JDBC4驱动程序为什么不能与Java 1.5一起使用(我们将DB2 JDBC4驱动程序与Java 1.5一起使用)。

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

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

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

在这里找到解决方案:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM