c3p0数据库连接池无法连接数据库—错误使用了username关键字
一、问题描述
上篇博客说到了关于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关键字的更多相关文章
- paip.c3p0 数据库连接池 NullPointerException 的解决...
paip.c3p0 数据库连接池 NullPointerException 的解决... 程序ide里面运行正常..外面bat运行错误.. 作者Attilax 艾龙, EMAIL:14665198 ...
- 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 ...
- c3p0数据库连接池(作用不重复)
/* * c3p0数据库连接池: * 只被初始化一次 * connection对象进行close时,不是正的关闭,而是将该数据连接归还给数据库连接池 * * */ 四个架包 mysql-connect ...
- C3P0数据库连接池使用方法
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一、连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程
c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一.连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 DB连接池HikariCP为什么如此快 原创: D ...
- 【Java EE 学习 16 上】【dbcp数据库连接池】【c3p0数据库连接池】
一.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: package day16.utils; import java.io.IOException; import java.lang.ref ...
- [原创]java WEB学习笔记80:Hibernate学习之路--- hibernate配置文件:JDBC 连接属性,C3P0 数据库连接池属性等
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- springboot 使用c3p0数据库连接池
springboot 使用c3p0数据库连接池的方法 本文转自:http://www.cnblogs.com/xiaosiyuan/p/6255292.html 使用springboot开发时,默认 ...
- c3p0 数据库连接池相关知识
c3p0数据库连接池的配置文件放在eclipse的src目录下,代码就可以识别. c3p0的配置文件的内容如下: <!-- Uncomment and set any of the option ...
随机推荐
- 【虚拟机-虚拟网络】使用 PsPing & PaPing 进行 TCP 端口连通性测试
PsPing & PaPing 介绍 通常,我们测试数据包能否通过 IP 协议到达特定主机时,都习惯使用 ping 命令.工作时 ping 向目标主机发送一个 IMCP Echo 请求的数据包 ...
- DA层(数据访问层)的方法不用静态的
1.静态方法,不会经过构造函数,所以你不能通过构造函数来初始参数,你只能通过传递参数,来初始他当你有多种参数需要传递的时候,你就要不断重载他了.当然你可以用参数型的类型,不过如果参数有一定结构,就很麻 ...
- 【Python图像特征的音乐序列生成】使用Python生成简单的MIDI文件
这个全新的Python音乐创作系列,将会不定期更新.写作这个系列的初衷,是为了做一个项目<基于图像特征的音乐序列生成模型>,实时地提取照片特征,进行神经网络处理,生成一段音乐. 千里之行, ...
- 人脸识别 python调用face++ 功能测试
使用python调用face++的API,调用detect功能,识别人脸 首先进入face++官网注册,获得API Key和API Secret.使用官网提供的免费python api调用功能,提供了 ...
- [手势识别] CNN + OpenCV 手势识别记录
这几天没事,想着再学点一些视觉识别方向的东西,因为之前做了验证码识别,有了机器学习的信心,因此这次打算做个手势识别,参考了很多网上的图像处理方式,中间也遇到了很多问题,最终算是做出来了吧. 1.训练集 ...
- 生成gt数据出问题
使用cout打印uchar类型数据时,打印出来是其相应的ascii码
- 安装mysql时出现问题的解决办法
问题一:在安装.重装时出现could not start the service mysql error:0 原因: 卸载mysql时并没有完全删除相关文件和服务,需要手动清除. 安装到最后一步exe ...
- mina架构在JT/T808协议应用程序中的应用
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务.虚拟机管道通信服务等),M ...
- runtime比较全面的总结
类和对象 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者 ...
- H5 移动APP - 面包店
使用jquerymobile.html5.css3实现移动APP 流程图 打包 用hbuilder实现打包 效果截图展示 图2-1 APP图标 图2-2 主页 图2-3 面包列表&详细信息 图 ...