我正在研究一个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但是,我不明白如何解决这个问题?
有人可以指导我解决这个问题吗?
答案 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