解决:Connections could not be acquired from the underlying database!

博客讲述了在使用EnterpriseDB(edb)的老项目中遇到的数据库连接问题,项目环境包括jdk6、spring3。启动时抛出CannotCreateTransactionException,经过排查驱动配置、URL、账号密码、数据库状态、驱动jar包等,问题依然存在。最终发现是由于jdbc驱动版本不匹配导致,将postgresql-8.1-407.jdbc3.jar替换为postgresql-42.2.4.jre6.jar后,问题得到解决。

公司老项目连接EnterpriseDB (edb)数据库,因为是老项目,开发环境是:

1,jdk6

2,spring3

3,连接edb

接手后项目启动报错如下:

org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database!
    at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:240)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:298)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterC

### 错误原因分析 `Connections could not be acquired from the underlying database` 错误通常表明应用程序无法从数据库连接池中获取数据库连接。根据提供的信息,以下是一些可能的原因: 1. **驱动版本不兼容**:如果使用的 `mysql-connector-java` 驱动版本与数据库版本不兼容,可能会导致连接失败。例如,使用 MySQL 8.0 数据库时,若使用的是 5.1.6 版本的驱动,可能会出现兼容性问题。换用 8.0.11 或更高版本的驱动后,问题得以解决 [^1]。 2. **驱动类名错误**:在 MySQL 8.0 及以上版本中,正确的驱动类名为 `com.mysql.cj.jdbc.Driver`。如果配置错误,可能导致连接失败 [^2]。 3. **数据库连接地址错误**:数据库连接 URL 配置错误也可能导致连接失败。例如,URL 中可能缺少必要的参数,如 `serverTimezone` 属性 [^2]。 4. **数据库服务未启动或权限问题**:如果数据库服务未启动,或者用户没有访问数据库的权限,也会导致连接失败 [^3]。 5. **依赖引入问题**:如果项目中引入的 MySQL 依赖无效或版本不匹配,也可能导致连接失败。例如,如果数据库是 MySQL 8.0.21,则应引入对应的 `mysql-connector-8.0.16.jar` 包 [^3]。 ### 解决方案 1. **更新驱动版本**:确保使用的 `mysql-connector-java` 驱动版本与数据库版本兼容。例如,对于 MySQL 8.0 数据库,使用 8.0.11 或更高版本的驱动 [^1]。 2. **检查驱动类名**:确保在配置文件中使用了正确的驱动类名 `com.mysql.cj.jdbc.Driver` [^2]。 3. **验证数据库连接地址**:检查数据库连接 URL 是否正确,特别是是否包含了必要的参数,如 `serverTimezone` [^2]。 4. **检查数据库服务状态和权限**:确保数据库服务正在运行,并且用户具有访问数据库的权限 [^3]。 5. **确认依赖引入正确**:确保项目中引入的 MySQL 依赖有效且版本正确。例如,如果数据库是 MySQL 8.0.21,则应引入对应的 `mysql-connector-java` 包 [^3]。 ### 示例代码 ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值