2011-02-10 145 views
1

是否有人實際上使用Firebird 2.1與Spring JDBC?Spring JDBC和Firebird數據庫

爲了測試的目的,我在MySQL,Postgres和Firebird中設置了三個簡單的表格數據庫。

我沒有問題連接並從MySQL或Postgres獲取數據。

但我只是無法讓火鳥工作。

我需要改變的是正確的.jar文件的jdbc.properties和pom.xml依賴關係。這很簡單。

我知道我的連接參數是爲Firebird數據庫正確,因爲我已經在一個最小的Java命令程序來檢測它們。我用這種方式連接並讀取數據。

我得到這個堆棧跟蹤的火鳥:

org.springframework.jdbc.CannotGetJdbcConnectionException:無法獲取JDBC連接;嵌套異常是org.apache.commons.dbcp.SQLNestedException:無法加載JDBC驅動程序類'org.firebirdsql.jdbc.FBDriver',原因:javax/resource/ResourceException,原因:javax/resource/ResourceException org.springframework.jdbc。 datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:572)

很奇怪,某種衝突我猜的......

我想使用Firebird,因爲它是這樣一個簡單的數據庫,但除非我解決這個問題,它將成爲Postgres。

任何幫助或指針在正確的方向將非常感激。

回答

0

Stacktrace看起來像javax.resource.ResourceException類錯過了。也許該驅動程序需要類路徑中的J2EE Connector Architecture類。

+0

感謝祭一些幫助,它真的很感激。我在下面添加了更多細節... – Lyndon 2011-02-10 21:36:10

4

OK,這裏是如何做到這一點:

以下內容添加到你的pom.xml(你既需要):

<dependency> 
     <groupId>org.firebirdsql.jdbc</groupId> 
     <artifactId>jaybird</artifactId> 
     <version>2.1.6</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.resource</groupId> 
     <artifactId>connector-api</artifactId> 
     <version>1.5</version> 
    </dependency> 

設置你的數據源在你的ApplicationContext文件:

<bean id="dataSource" 
    class="org.firebirdsql.pool.FBWrappingDataSource" 
    p:database="${jdbc.database}" 
    p:userName="${jdbc.username}" 
    p:password="${jdbc.password}" 
    p:type="${jdbc.connection.type}" 
    p:maxPoolSize="5" 
    p:minPoolSize="1" 
    p:pooling="true" /> 

請注意,它會像其他數據庫一樣使用Firebird特定池NOT org.apache.commons.dbcp.BasicDataSource。

請注意非標準參數名稱。

這是我的jdbc.properties文件:

jdbc.driverClassName=org.firebirdsql.jdbc.FBDriver 
jdbc.dialect=org.hibernate.dialect.FirebirdDialect 
jdbc.database=/path/to/database.fdb 
jdbc.username=admin 
jdbc.password=***** 
jdbc.defaultAutoCommit=false 
jdbc.connection.type=TYPE4 

我不知道如何設置自動提交過呢。對不起,我試圖找出答案。

爲什麼Firebird不像其他數據庫那樣使用STANDARD?更多的人可能會使用這個很棒的小數據庫

1

以防萬一任何人有興趣,這裏有一個後續:

我最終與上面的設置放棄了,你只能打這麼辛苦那麼久...

問題是org.firebirdsql.pool.FBWrappingDataSource。

最後,我得到了Proxool連接池的工作和使用。

<bean id="dataSource" 
    class="org.logicalcobwebs.proxool.ProxoolDataSource" 
    p:alias="${jdbc.alias}" 
    p:driver="${jdbc.driverClassName}" 
    p:driverUrl="${jdbc.databaseurl}" 
    p:user="${jdbc.username}" 
    p:password="${jdbc.password}" /> 

你也必須做這樣的事情:

<dependency> 
     <groupId>proxool</groupId> 
     <artifactId>proxool</artifactId> 
     <version>0.9.1</version> 
    </dependency> 
    <dependency> 
     <groupId>proxool</groupId> 
     <artifactId>cglib</artifactId> 
     <version>1.0.0</version> 
    </dependency> 

如果你想使用火鳥2春,請只問任何幫助......

0

我認爲這是已經不適合任何人,但我必須使用Spring連接firebird。這是非常相似的丹尼爾Fath的答案,但萬一有人需要它..

語境:

<bean id="FirebirdDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
      p:driverClassName="org.firebirdsql.pool.FBWrappingDataSource" 
      p:url="jdbc:firebirdsql://1.1.1.1/your_database_name.fdb" 
      p:username="user" 
      p:password="secret" /> 

添加到您的構建框架(我用的搖籃):

compile group: 'org.firebirdsql.jdbc', name: 'jaybird', version: '2.2.5'