java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)错误原因

  1. 用户对应的密码不正确

    如果是这样,验证的方式是在CMD中切换到mysql server的bin目录输入命令:

    mysql -u [username] -p

    回车后,输入密码,如果访问被拒,那么错误原因应该是这种。

  2. 在用户名和密码正确的情况下,其次的原因可能就是没有权限

    在workbench中的左侧栏上方的user and privilege中查看自己选中的user acount的
    schema privileges,如果什么都没有在query中执行命令:

    GRANT ALL PRIVILEGES ON [databasename].[tablename]TO ‘user’@’host’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;

    例如:

    GRANT ALL PRIVILEGES ON ComicFM.* TO ‘root’@’localhost’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

  3. 在1,2都没问题的状况下,应该就是编码方式的原因了。

try {
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = (Connection)DriverManager
        .getConnection("jdbc:mysql://localhost:3306/?user=root&password=123456
        &useUnicode=true&characterEncoding=UTF8");
    Statement s =  conn.createStatement();
    System.out.println(conn.isClosed());
}
 catch (Exception e) {
            e.printStackTrace();
}

在main函数中用这段代码测试一番(记得user、password和端口不同要改),正确的运行结果是false,没报错的话,那么就是编码方式的问题.

如果是在spring中设置dataSource的方式,就只能这样注释掉user和password,否则,连接到数据库的url中user和password没被正确编码

  • applicationContext.xml
<!-- config datasource -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close" scope="singleton">
        <property name="driverClass" value='${jdbc.driver}' />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <!-- <property name="user" value="${jdbc.username}" />
        <property name="password" value="$jdbc.password}" /> -->
        <property name="maxPoolSize" value="20" />
        <property name="minPoolSize" value="1" />
        <property name="initialPoolSize" value="1" />
        <property name="maxIdleTime" value="20" />
    </bean>
  • jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=UTF8&user=root&password=123456

错误原因暂时只找到这三种,以后有的话再加。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值