2008-11-07 47 views
1

有誰知道是怎麼回事:「沒有合適的驅動程序」問題Hibernate3中,PostgreSQL的8.3和Java 5

我跑冬眠3.2.6對我的Mac OS X上的PostgreSQL 8.3(通過Fink安裝的)數據庫當我使用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> 

編輯:連接URL的更長,更常見的形式爲:爲jdbc:在PostgreSQL://本地主機/測試具有完全相同的行爲。

司機罐子肯定是在類路徑中,我也沒有設法得到任何錯誤與此直接使用JDBC的測試代碼:

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

回答

4

我沒有看到你在你的Hibernate配置中指定驅動類。嘗試添加以下內容:

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

謝謝!有效。不知何故,我複製了一個驅動類屬性不存在的例子。而且因爲它與JDBC4/Java6-setup一起工作,我無法弄清楚配置文件可能存在問題。 – auramo 2008-11-09 21:03:56

1

你注意到沒有連接URL是不完整的

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

,而不是

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

是的,我實際上首先有更長的版本(相同的行爲,適用於Java 6/JDBC4,不適用於Java 5/JDBC3),我看到了sh orter表單依賴於某個地方的默認設置並將其留在那裏。我想我會改變編輯的問題。 – auramo 2008-11-07 19:48:38

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驅動程序?

+0

我有,它不起作用。在你的情況下,用於DB2的JDBC4驅動程序可能是用1.5或更低版本編譯的。在PostgreSQL的情況下,它被編譯爲1。6,因此1.5無法加載類。 – auramo 2008-11-07 20:40:23

1

其中一個新的JDBC4功能是通過服務提供者機制自動加載。通過在jar文件中包含META-INF/services/java.sql.Driver文件,不再需要執行Class.forName(「」)。這隻適用於1.6 JVM。

1

我有同樣的問題用一個servlet解決註冊驅動程序 「沒有發現suiteble驅動程序」 是:

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/

相關問題