java.sql.SQLException: Access denied for user 'xxx'@'localhost' (using password: YES)
异常信息:
java.sql.SQLException: Access denied for user 'xxx'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:935)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4101)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1300)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2337)
配置:
jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false
username=root
password=root
applicationContext.xml
<!--数据库连接技术有spring提供的dataSource,三方开源DBCP连接池及开源c3p0连接池,使用时根据情况三者用其一
其中spring提供的dataSource(DriverManagerDataSource)它用于开发简单的应用和程序测试,并且不支持连接池,每次连接数据库都是创建新的连接对象。
相关文章:https://blog.csdn.net/J080624/article/details/53737437
-->
<!--spring提供的dataSource 不支持连接池-->
<!--
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
-->
<!--开源c3p0设置配置信息-->
<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}"/>
</bean>
<!--开源数据库连接池DBCP配置-->
<!-- <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${driver}"/>
<property name="username" value="${name}"/>
<property name="password" value="${password}"/>
<property name="url" value="${url}"/>
</bean>-->
<!--将jdbc模板交给容器管理-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--读取c3p0数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
问题原因:
${username}在spring中默认会获取当前计算机的名字,因此导致了连不上数据库。
最简单处理办法:
修改jdbc.properties中用户名的配置,如把username=root修改为jdbc.username=root 或者 name=root,总之名字不能为“username
或userName”;
java获取当前电脑名字:System.getenv(“username”)或System.getenv(“userName”)。