一、问题描述

上篇博客说到了关于maven无法下载依赖jar包的问题,这篇博客再说一下关于在本个项目中遇到的关于使用C3P0连接池连接数据库的问题,真心很奇葩,在此,也请大家引起注意。首先看我的项目基本结构:

已确定的情况:相关jar包均已正确下载,路径跳转正常,jdbc所配置的内容,完全正确。相关数据库连接池和spring的整合也都完全正确,但事实就是没法儿连接上!

解决了几个拼写错误,小的属性配置错误后,仍是连接失败,报错最多的就是:

1,Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database!

2,com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.

和另外一个刚开始没看明白的,事实上提示很清楚的错误:

java.sql.SQLException: Access denied for user 'AngelHHX'@'localhost' (using password: YES)

二、解决过程

2.1,找工具的原因

从网上查的无法连接的解决办法是:开放MySQL的权限,让当前用户获取访问权限;修改密码;重装数据库;可能没有下载MySQL的驱动。经过一一排查,都尝试了一遍,就差重装数据库了。

这时候,查看了之前用的关于c3p0数据库连接池的用法,也用可视化工具连接了自己 的数据库,确定从理论上都没有任何问题,所以,就感觉是不是这个版本的c3p0连接池出问题了,所以给换了之前也用过的Druid,结果还是报一样的错,这时候就明显感觉到不是连接池的原因了,为了解决最初的问题,又给换回了c3p0.

2.2,找代码的原因

等到确立了连接池和数据库都没有问题后,就从jdbc.properties文件里面找问题,于是写了段代码,直接用jdbc拿着文件里面的用户名、密码、驱动、数据库连接地址进行数据库操作测试,结果是正常的。也就是说jdbc.properties文件里面的变量赋值也都完全正确。

2.3,找工具与工具之间结合的原因

因为再一次确定变量的值都没有问题,那么就开始查看spring和数据库连接池的配置文件,首先是检查jdbc.properties的文件路径,正确! 然后再是检查了相应的数据库连接池的属性配置(不同的数据库连接池,属性可能不一样,就像c3p0用jdbcUrl,而Druid用url)结果都能对上。最后检查从jdbc.properties里面取值是否正确,也依然正确。这时候问题就好像往奇葩和无解的路上,又走了一步。

因为再三检查各地配置,而直接用jdbc连接是正常的,所以问题还是被定位到了配置文件从jdbc.properties文件取变量值的这一步。于是,先不用变量,直接把值赋到配置文件,经过测试,成功。问题进一步明确,绝对是出在了变量取值的过程中,所以一个一个变量进行测试,最终确定是数据库连接用户名username的变量出了问题。

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/XXXXX
username=root
password=XXXXX
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}" />
<property name="jdbcUrl" value="${url}" />
<property name="user" value="${username}" />
<property name="password" value="${password}" />

又回到最开始系统报错的提示上:java.sql.SQLException: Access denied for user 'AngelHHX'@'localhost' (using password: YES)  我当时还想,这个AngelHHX用户名是什么意思,从哪儿来的,这不是我的电脑用户名吗,怎么跑到这里来了。  但问题也就出在了这里,当我在jdbc.properties用username变量名称的时候,它根本没有被我指定的root赋值,而是获取了我本地电脑用户名,进一步导致程序出错。当我把这个变量名称换成别的任何规范名称后,无问题!

2.4,找电脑默认语言的原因

经过了第三步,我已经确认那个username可能是用到电脑的关键字了,我一想到我的默认语言是英语,然后这是不是有影响呢?(因为我看别人用username当变量,貌似没有出问题)于是,我将系统默认语言改回了中文。测试,仍然报错,也肯定了一个事实:跟我系统的默认语言没有关系

到此,很费解别人那个代码上的username,究竟是怎么运行通过的,也或者他们也没有通过,嘎嘎嘎嘎嘎。。。。。。。。

三、总结

问题解决了,但是从解决这个问题的过程中,发现了自己很多有待提升的地方。审视我最近解决项目问题的步骤和思路,很明显的发现,我这逻辑和步骤都不是那么快、准、狠。这可能是和我对程序运行的基本步骤不甚了解有关,也可能是和我自己看问题的全局观有关。不管怎样,我感觉我接下来要做的一件大事,就是去分析我解决每一个问题的惯用思维和效率。

c3p0数据库连接池无法连接数据库—错误使用了username关键字的更多相关文章

  1. paip.c3p0 数据库连接池 NullPointerException 的解决...

    paip.c3p0 数据库连接池 NullPointerException 的解决... 程序ide里面运行正常..外面bat运行错误.. 作者Attilax  艾龙,  EMAIL:14665198 ...

  2. paip.提升稳定性---c3p0数据库连接池不能取到连接An attempt by a client to checkout a Connection has timed out

    paip.提升稳定性---c3p0数据库连接池不能取到连接An attempt by a client to checkout a Connection has timed out 作者Attilax ...

  3. c3p0数据库连接池(作用不重复)

    /* * c3p0数据库连接池: * 只被初始化一次 * connection对象进行close时,不是正的关闭,而是将该数据连接归还给数据库连接池 * * */ 四个架包 mysql-connect ...

  4. C3P0数据库连接池使用方法

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  5. c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一、连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程

    c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一.连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 DB连接池HikariCP为什么如此快 原创: D ...

  6. 【Java EE 学习 16 上】【dbcp数据库连接池】【c3p0数据库连接池】

    一.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: package day16.utils; import java.io.IOException; import java.lang.ref ...

  7. [原创]java WEB学习笔记80:Hibernate学习之路--- hibernate配置文件:JDBC 连接属性,C3P0 数据库连接池属性等

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. springboot 使用c3p0数据库连接池

    springboot 使用c3p0数据库连接池的方法  本文转自:http://www.cnblogs.com/xiaosiyuan/p/6255292.html 使用springboot开发时,默认 ...

  9. c3p0 数据库连接池相关知识

    c3p0数据库连接池的配置文件放在eclipse的src目录下,代码就可以识别. c3p0的配置文件的内容如下: <!-- Uncomment and set any of the option ...

随机推荐

  1. IT的学习部落(持续更新)

    1.易百教程 - 专注于IT教程和实例     http://www.yiibai.com/ 2.站长特效 - js特效      http://www.zzjs.net/ 3.酷站-享受编程和技术所 ...

  2. Java中的后台线程和join方法

    /*守护线程(后台线程):在一个进程中如果只剩下 了守护线程,那么守护线程也会死亡. 需求: 模拟QQ下载更新包. 一个线程默认都不是守护线程. */ public class Demo extend ...

  3. Oracle 闪回 找回数据的实现方法

    Oracle 闪回 找回数据的实现方法 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复.这篇文章主要介绍了Oracle 闪回 找回 ...

  4. MySQL索引类型及优化

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

  5. 01_2_Servlet简介

    01_2_Servlet简介 1. Servlet简介 Servlet是服务器小应用程序 用来完成B/S架构下,客户端请求的响应处理 平台独立,性能优良,能以线程方式运行 Servlet API为Se ...

  6. iOS监听电话来电、挂断、拨号等

    以下,来讲解在app内如何调用打电话功能和监听电话来电.挂断.拨号等功能. 简单的UI布局: 首先,先实现拨打电话的功能,以便于后续测试: // 拨打电话 - (IBAction)dialingBut ...

  7. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  8. Redis错误解决:(error) MISCONF Redis is configured to save RDB snapshots

    刚开始学习使用redis数据库,在执行删除命令时,提示了我这么一个错误: 错误提示 (error) MISCONF Redis is configured to save RDB snapshots, ...

  9. MySQL的GTID复制与传统复制的相互切换

    MySQL的GTID复制与传统复制的相互转换 1. GTID复制转换成传统复制 1.1 环境准备 1.2 停止slave 1.3 查看当前主从状态 1.4 change master 1.5 启动主从 ...

  10. MySQL在windows上的安装步骤

    参考文章MySQL安装及建议:https://zhuanlan.zhihu.com/p/44977117 但在进入mysql中修改root命令时,使用文章中的命令: ALTER USER 'root' ...