是否有人实际上使用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。
非常感谢任何正确方向的帮助或指示。
答案 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'