2014-05-01 156 views
0

我嘗試連接到我的Mac上的MySQL數據庫。這個MySQL與MAMP一起安裝。當使用phpMyAdmin和CLI時,我可以連接到數據庫。但是,當我試圖用Java來連接,這種錯誤發生:訪問被拒絕用戶'admin'@'localhost'(使用密碼:YES)

java.sql.SQLException: Access denied for user 'admin'@'localhost' (using password: YES) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:926) 
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4732) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1340) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2506) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344) 
    at java.sql.DriverManager.getConnection(DriverManager.java:582) 
    at java.sql.DriverManager.getConnection(DriverManager.java:207) 
    at Hello.main(Hello.java:11) 

這裏是我的Java代碼:

import java.sql.Connection; 
import java.sql.DriverManager; 


public class Hello { 
    public static void main(String[] args) { 
     try { 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      //String url ="jdbc:mysql://localhost/xinandasai?user=root&password=root&useUnicode=true&characterEncoding=8859_1"; 
      //Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/xinandasai","admin","cosmo"); 
      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/xinandasai?" + "user=admin&password=cosmo"); 
      //Statement statement = conn.createStatement(); 
      //statement.execute("INSERT INTO test (user) VALUES ('"+user+"')"); 
      //conn.close(); 
     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
    } 
} 

我已經檢查了配置。我確信這些問題:

  1. 用戶名和密碼是正確的,因爲它們在使用CLI時是正確的。

  2. 的所有特權是通過使用SQL語句授予: 「GRANT ALL PRIVILEGES ON TO '管理員' @ 'localhost' 的IDENTIFIED BY WITH GRANT OPTION 'COSMO'。」

我該如何解決這個問題?

它可能與版本有關嗎?我的MySQL版本是5.5.25。和連接器版本是5.1.30

+0

@JqueryLearner不幸的是,這種方法也失敗了。同樣的例外被提出。 – cosmozhang

+0

我安裝了MySQL Community Edition的完整版本並在端口3307上運行(與MySQL的端口3306不同)已經存在)。我成功地用相同的程序連接到較新的MySQL。所以我認爲這個問題來自MAMP所做的一些限制。 – cosmozhang

回答

0

我沒有看到這段代碼中的任何錯誤。一般語法是

Class.forName("com.mysql.jdbc.Driver"); 
Connection conn = null; 
conn = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password"); 
conn.close(); 

我能看到你的評論字符串中嘗試這樣的組合,而且儘量用IP代替本地主機可能是,將工作。你可以使用ipconfig命令

Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/xinandasai","admin","cosmo"); 

在此之前,你必須授予訪問所有IP像

GRANT ALL PRIVILEGES ON db.* TO db_user @'%' IDENTIFIED BY 'db_passwd'; 

%是通配符的IP地址,通過命令提示符讓你MACHIN IP

+0

我已經嘗試過「授予*。*'所有特權到'admin'@'%'IDENTIFIED BY'cosmo';」並連接到地址127.0.0.1。但仍然無用。 – cosmozhang

+0

這很奇怪。嘗試重置密碼。按照這個鏈接https://help.ubuntu.com/community/MysqlPasswordReset –

+0

我使用MAMP(Apache + MySQL + PHP for Mac)而不是MySQL for Linux。所以我在GUI中更改了密碼。但仍然無用。 – cosmozhang

0

不管怎麼說它與連接器版本無關。我已經嘗試了版本5.1.30和5.1.13的相同代碼,並且都可以同時使用。 我也嘗試了兩種重載方法:

c = DriverManager.getConnection(URL+DBNAME, LOGIN, PASSWORD); 

c = DriverManager.getConnection("jdbc:mysql://localhost/universite?" + "user=root&password=root"); 

工作了兩個版本

儘量確保您有訪問保證下,向全IP不會忽略。

+0

我已經嘗試「授予所有權限。」'admin'@'%'IDENTIFIED BY'cosmo';「並連接到地址127.0.0.1。但仍然無用。 – cosmozhang

+0

您是否在與數據庫機器相同的機器上運行您的java應用程序? – javadev

+0

是的,兩者都在我的個人電腦上運行 – cosmozhang

相關問題