2012-08-12 186 views
29

以下代码:java.sql.SQLException中:访问被拒绝的用户 '根' @ '本地主机'(使用密码:是)

Class.forName("com.mysql.jdbc.Driver"); 
Connection m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root"); 

抛出上getConnection()此异常:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919) 
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2397) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at db.Database.<init>(Database.java:91) 
    at db.Main.main(Main.java:10) 

这是如何造成的,我该如何解决这个问题?

编辑:

public static void main(String[] args) throws ClassNotFoundException, ServletException, SQLException 
    { 

     try 
     { 
      Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
      Statement s = (Statement) conn.createStatement(); 
      int result = s.executeUpdate("CREATE DATABASE databasename"); 
     } 


     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
} 

产地:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919) 
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2397) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at db.Main.main(Main.java:19) 
+1

你能够连接使用MySQL GUI客户端像SqlYog或PhpMyAdmin? – Tomer 2012-08-12 12:56:16

+1

@ ftom2:是的,我可以成功访问'phpmyadmin'。 – ron 2012-08-12 12:59:02

+1

你确定**用户名**和**密码**是否正确? Seesm给我没有这样的用户**根** :(不知道虽然,但你不必提供**数据库名称**太像'Connection con = DriverManager.getConnection(“jdbc:mysql: // localhost; database = mywebsitedb; user = sa; password = thatstrue;“);' – 2012-08-12 13:02:30

回答

8

当你从头开始创建一个数据库,你可以使用:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename"); 
int result = ps.executeUpdate(); 

这里是一个identical scenario

+0

如果我根本没有任何数据库?我想用java代码创建数据库,而不是在'phpmyadmin'中手动创建数据库,那么'databaseName'不相关? – ron 2012-08-12 13:06:18

+0

好的,道歉,更新了新的语法 – Reimeus 2012-08-12 13:12:50

+0

请参阅编辑的文章。 – ron 2012-08-12 13:16:55

1

尝试像这样....

public static Connection getConnection() throws SQLException{ 

    String driver = "com.mysql.jdbc.Driver"; 
    String url = "jdbc:mysql://localhost:3306/test"; 
    String username = "root"; 
    String password = "vicky";   // Change it to your Password 
    System.setProperty(driver,""); 

    return DriverManager.getConnection(url,username,password); 
} 
+3

为什么它会解决具体问题?你没有以任何方式解释原因。 – BalusC 2012-08-12 13:02:35

2

您应指定要连接到数据库:

jdbc:mysql://localhost:3306/mydb 
38

这可以帮助你:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION; 

与命令行或一些GUI工具执行。

不要忘记用真实密码替换%password%

+4

您应该将“IDENTIFIED BY'root'”改为“IDENTIFIED BY'密码'”以避免混淆。 – Pranjal 2016-02-11 05:49:47

+0

@Pranjal你是对的。谢谢。我编辑了答案。 – evg 2016-07-05 21:59:42

+1

@evg我已成功执行此查询,但仍然没有摆脱此错误 – 2016-08-24 10:54:44

1

我遇到了同样的问题。增加了mysql服务端口号(3307),解决了这个问题。

conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/?" + "user=root&password=password"); 
3

我也有类似的问题,但differemce是:我没有从localhost执行我的JavaApp,但是从远程PC。所以我就有点像java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES) 为了解决这个问题,你可以简单地登录到phpMyAdmin,去Users,点击add user并输入要执行你的JavaApp主机(或选择Any Host

3

您可以使用此

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
    static final String DB_URL = "jdbc:mysql://localhost:3306/YOUR_DB_NAME"; 


    static final String USER = "root"; 
    static final String PASS = "YOUR_ROOT_PASSWORD"; 

    Connection conn = DriverManager.getConnection(DB_URL,USER,PASS); 

你必须给出正确的root密码。

1

尽管这可能不是您的问题的原因,但如果在同一端口上运行两个MySQL服务,您将得到相同的错误。您可以通过查看任务管理器的服务选项卡中的服务列表来检查窗口。

+0

这是一条评论,而不是答案。 – 2016-06-21 20:22:58

0

我有同样的问题“java.sql.SQLException:访问拒绝用户'root'@'localhost'(使用密码:是)”。问题是“错误密码”。将查询原样复制并粘贴到shell中,以检查它是否提供了所需的输出。小错误消耗更多时间。

1

这个异常也是由于mysql db和你的pom.xml/jar版本不匹配造成的。

确保您的pom.xml/jar版本高于您的mysql db版本。 由于较高版本与较低版本兼容,但反之亦然。

解决方案对Java项目

  • 替换合适版本的Jar。对Maven

解决方案基于

  • 变化的依赖版本中的pom.xml

解决方案春季启动 - 通过添加 5.1.5.Final覆盖春天启动的依赖

0

我不得不改变我的SQL设置(在我的主机,Dreamhost在我的情况)到所有由于我在计算机上运行IDE中的程序,所以只能使用用户名从其他主机访问数据库,而不仅仅是Dreamhost。我现在通过将%添加到允许主机列表中。它现在工作!

+0

我应该补充说,这与#munchkins方法类似,但是从SQL控制面板结束。 – 2017-11-16 02:32:38

0

我遇到此错误。问题是我有错误的数据库名称。

+0

这不提供问题的答案。一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),你将可以[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/18284339) – Mamun 2017-12-18 04:07:00

相关问题