2011-02-10 103 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'