[英]“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://codingexplorer.wordpress.com/2009/09/06/%E2%80%9Cno-suitable-driver%E2%80%9D-for-postgresql/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.