Spring JDBC和Firebird数据库

时间:2011-02-10 15:58:17

标签: spring jdbc firebird

是否有人实际上使用Firebird 2.1和Spring JDBC?

出于测试目的,我在MySQL,Postgres和Firebird中设置了三个简单的表数据库。

连接和从MySQL或Postgres获取数据没有问题。

但我无法让Firebird工作。

我需要更改的是正确的.jar文件的jdbc.properties和pom.xml依赖项。就这么简单。

我知道Firebird数据库的连接参数正确,因为我已在最小的Java命令程序中检查过它们。我以这种方式连接和读取数据。

我得到了这个StackTrace for Firebird:

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。

非常感谢任何正确方向的帮助或指示。

4 个答案:

答案 0 :(得分:4)

好的,这是怎么做的:

将以下内容添加到您的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特定池而不是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

我不知道如何关闭AutoCommit。对不起,我想知道。

为什么Firebird不会像其他数据库那样标准化?更多人可能会使用这个伟大的小数据库...

答案 1 :(得分: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>

如果您在使用Spring的Firebird 2时需要任何帮助,请询问......

答案 2 :(得分:0)

Stacktrace似乎错过了javax.resource.ResourceException课程。也许该驱动程序需要类路径中的J2EE Connector Architecture类。

答案 3 :(得分:0)

我认为它已经不适合任何人,但我必须使用Spring连接firebird。这与Daniel 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" />

添加到您的构建框架(我使用Gradle):

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