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

    <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="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

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

你可能感兴趣的:(Java,mysql)