2012-08-12 130 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

相關問題