有人知道这里发生了什么:
我在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");
}
答案 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://codingexplorer.wordpress.com/2009/09/06/%E2%80%9Cno-suitable-driver%E2%80%9D-for-postgresql/