来自servlet的用户'root'@'localhost'的访问被拒绝

时间:2014-02-27 13:46:37

标签: mysql servlets mysql-workbench

我正在研究一个mysql数据库,从Mac上的Servlet程序(通过Eclipse)访问。我最近的问题是,我无法通过我的Servlet访问mysql数据库,这在以前工作得很好。我使用MySQLWorkBench,数据库在Mac上运行。 当Servlet尝试访问它时,它会抛出以下错误。实际上,密码是空的。在Mac机器上工作。

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

Servlet代码如下:

// MySQL
    Connection conn = null;
    Properties connectionProps = new Properties();
    connectionProps.put("user", "root");        
    connectionProps.put("password", ""); // No password is set

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                       "jdbc:" + "mysql" + "://" +
                       "localhost" +
                       ":" + "3306" + "/InfoDB",
                       connectionProps);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    System.out.println("Connected to database");
    // insert record
    try {
        Statement stmt = (Statement) conn.createStatement();

        String sql = "SELECT IP FROM InfoTable";
        ResultSet rs = stmt.executeQuery(sql);
        //STEP 5: Extract data from result set
        String ipaddress = null;
          while(rs.next()){
              //Retrieve by column name
              ipaddress  = rs.getString("IP");
              System.out.println("IP Address retrieved from DB: " + ipaddress);
          }
          PrintWriter out = response.getWriter();
          out.println(ipaddress);

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

相同的代码在之前工作正常。我在这看到一些建议, Solution for this issue, 但我不知道这个information.schema table在哪里以及如何设置权限。 而且,在这个链接中有另一个建议,Solution for this issue但是,我不明白如何解决这个问题?

有人可以指导我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

您的root帐户没有密码。所以,建立没有密码的连接。

connectionProps.put("user", "root");        
// Remove this line --> connectionProps.put("password", ""); // No password is set

或者更新root帐户的密码并使用该密码进行连接。

MySQL的:

GRANT ALL PRIVILEGES ON *.* TO  'root'@'localhost' IDENTIFIED BY 'your-password';

然后

connectionProps.put("user", "root");        
connectionProps.put("password", "your-password");

答案 1 :(得分:0)

我已经在另一个帖子中回复了这个,从那里复制。

我有类似的问题,并尝试了几个小时来找到解决方案。最后,我能够通过更新mysql-connector版本来解决问题。试试最新的连接器版本(5.1.29),让我知道他的作品是否适用。如果您更新了MySQL服务器版本,这可能会有所帮助。

答案 2 :(得分:0)

我是来自南非Midrand Graduate Institute的学生,我的错误是通过将双引号中的密码短语更改为空白mysqlbench来自动保存密码。

的DriverManager.getConnection(" JDBC:MySQL的://本地主机:3306 /书籍&#34 ;,                 " root","密码"); 改为: 的DriverManager.getConnection(" JDBC:MySQL的://本地主机:3306 /书籍&#34 ;,                 " root","");

而且:我的输出 列出所有书籍: 书 - Id:1,书名:Practical Clojure 书 - Id:2,书名:Beginning Groovy,Grails和 格里芬 书 - Id:3,书名:Grails的权威指南2 书 - Id:4,书名:Groovy和Grails食谱 书 - Id:5,书名:现代Java Web开发 书 - Id:6,书名:Java 7食谱 书 - Id:7,书名:Java EE 7食谱 书 - Id:8,书名:Beginning Java 7 书 - Id:9,书名:Pro Java 7 NIO.2 书 - Id:10,书名:Java 7 for Absolute Beginners Book - Id:11,书名:Oracle Certified Java Enterprise 架构师Java EE7 书 - Id:12,书名:Beginning Scala ++++++++++++++++++++++++++++++ 按关键字搜索书籍:Java 书 - Id:5,书名:现代Java Web开发 书 - Id:6,书名:Java 7食谱 书 - Id:7,书名:Java EE 7食谱 书 - Id:8,书名:Beginning Java 7 书 - Id:9,书名:Pro Java 7 NIO.2 书 - Id:10,书名:Java 7 for Absolute Beginners Book - Id:11,书名:Oracle Certified Java Enterprise 架构师Java EE7