• Eclipse使用jdbc连接MySql数据库报:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)


    在使用eclipse连接mysql数据库时报异常: 

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

        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)

        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)

        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)

        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)

        at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)

        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)

        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)

        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)

        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)

        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)

        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)

        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)

        at java.sql.DriverManager.getConnection(DriverManager.java:571)

        at java.sql.DriverManager.getConnection(DriverManager.java:233)

        at cn.itcast.mybatis.jdbc.jdbcTest.main(jdbcTest.java:36)

     jdk版本:1.7.0_79,mysql为5.7,使用mysql-connector-java-5.1.18.jar。

    代码如下:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * 
     * @author lilia
     *
     */
    public class jdbcTest {
        //mysql数据库地址
        private static final String url = "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8";
        //mysql数据库用户名
        private static final String username = "root";
        //myslq数据库密码
        private static final String password = "root";
        
        public static void main(String[] args) {
            //数据库连接
            Connection connection = null;
            //预编译的statement(使用预编译的statement可以提高数据库的性能)
            PreparedStatement preparedStatement = null;
            //结果集对象
            ResultSet resultSet = null;
            
            try {
                //加载数据驱动
                Class.forName("com.mysql.jdbc.Driver");
                //通过驱动管理类获取数据库连接
                connection = DriverManager.getConnection(url, username, password);
                //定义sql语句
                String sql = "select * from user where username = ?";
                //获取预处理statement,并把sql放入到statement中。
                preparedStatement = connection.prepareStatement(sql);
                //参数赋值,序号从1开始
                preparedStatement.setString(1, "王五");
                //向数据库发出sql执行查询,并返回查询结果集
                resultSet = preparedStatement.executeQuery();
                while (resultSet.next()) {
                    System.out.println(resultSet.getString("id") + ":" + resultSet.getString("username"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //释放资源
                if (resultSet != null) {
                    try {
                        resultSet.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(preparedStatement != null){
                    try {
                        preparedStatement.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(connection != null){
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    View Code

    执行后报错如上。

    网上搜索很多解决方案行不通,最终找到问题所在:root帐户默认不开放远程访问权限,所以需要修改一下相关权限。,参考:https://blog.csdn.net/jack__love/article/details/79019049

    具体解决步骤如下:

    1. 打开MySQL目录下的my.ini文件(win10默认安装在C:ProgramDataMySQLMySQL Server 5.7my.ini),在文件的最后添加一行“skip-grant-tables”,保存并关闭文件。
    2. 重启mysql服务,通过服务管理器(服务名称:mysql57)或者cmd(>net stop mysql57  >net start mysql57)都行。
    3. 通过命令行进入MySQL的安装目录BIN下(WIN10默认安装,BIN目录为:C:Program FilesMySQLMySQL Server 5.7in,如果配置过mysql环境变量可不进入该目录,直接执行命令),输入“mysql -u root -p”(不输入密码),提示输入密码不用管,直接Enter回车即可进入数据库。
    4. 执行“use mysql;”,使用mysql数据库。
    5. 执行命令“update user set authentication_string=PASSWORD("root") where user='root';”(修改root的密码)。
    6. 打开MySQL目录下的my.ini文件,删除最后一行的“skip-grant-tables”,保存并关闭文件。
    7. 重启MySQL服务。
    8. 重新执行代码,执行成功。

     

    问题解决。

  • 相关阅读:
    memcached与redis的一些区别小结
    ubuntu下定时任务
    hdu4135 容斥定理
    hdu1251 统计难题 字典树
    hdu1710 Binary Tree Traversals(二叉树的遍历)
    Codeforces Round #364 (Div. 2) B. Cells Not Under Attack
    KMP算法 hdu4686 Oulipo
    判断字符串是否在字典里
    floyd算法 poj2253
    最短路径dijkstra算法
  • 原文地址:https://www.cnblogs.com/liliang99a/p/11203647.html
Copyright © 2020-2023  润新知