2012-02-14 48 views
0

有人能向我解釋爲什麼這條線的工作原理:的SQLException:通信鏈路故障(Java/MySQL的)

conn = DriverManager.getConnection("jdbc:mysql://myWebsite.com:3306/schemaName?user=userX&password=passwordX"); 

但是,這行不:

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/schemaName?user=userX&password=passwordX"); 

,我收到了通信鏈路故障時,嘗試通過本地主機(或127.0.0.1)進行訪問。但是,我可以通過PHP和MySQLQuery瀏覽器和MySQL Aministrator通過本地主機訪問數據庫。

如果需要的話這裏是我使用的整個方法:

public Database() throws Exception { 
Class.forName("com.mysql.jdbc.Driver").newInstance(); 

try { 
    conn = DriverManager.getConnection("jdbc:mysql://myWebsite.com:3306/schemaName?user=userX&password=passwordX"); 
    // Next line does not work. 
    // conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/schemaName?user=userX&password=passwordX"); 
    } catch (SQLException ex) { 
     displaySQLException(ex); // Seperate routine to display errors. 
    } 
} 

感謝您的幫助, 理查德

+0

做「用戶X」必須從本地主機訪問數據庫的權限?可能是PHPandMySQl查詢瀏覽器,MySQL管理員使用可以從本地主機訪問數據庫的其他用戶。 – 2012-02-14 04:33:00

回答

2

可能你的mysqld是binding專門用於以太網接口而不是所有接口(0.0.0.0)或本地主機接口(127.0.0.1)。

在* nix平臺,你可以檢查哪些接口守護進程監聽使用下面的命令:

$ netstat -ln|grep 3306 
tcp  0  0 0.0.0.0:3306    0.0.0.0:*     LISTEN 
+0

我不是那麼熟悉java和/或mysql ...所以我不明白爲什麼這個工作,當我沒有與其他應用程序的問題。 感謝所有回覆。 – 2012-02-14 05:04:36

+0

@RichardRhyan其他應用程序可能使用[socket](http://dev.mysql.com/doc/refman/5.5/en/server-options.html#option_mysqld_skip-networking)接口而不是tcp。 – jamesallman 2012-02-14 05:08:25

0

在第二代碼:

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/schemaName? 
       user=userX&password=passwordX"); 

它將嘗試連接到本地主機上的機器上的mysql(,其上的代碼正在運行)。在你的情況下,你的機器上的mysql或者你正在運行代碼的地方可能不可用或停止,或者你傳遞的usename/password是無效的,或者schemaname不存在。但是在myWebsite.com上它已經結束了。

你的代碼沒有錯。確保mySql已安裝且正在運行且用戶名/密碼有效,在運行此代碼的計算機上存在提供了schemaname的模式,其中localhost

0

可能發生這種情況的原因有很多,像

  1. MySQL服務器可能會在目標機器上停止
  2. MySQL的可能配置不接受遠程連接
  3. 防火牆可能在禁止遠程連接端口3306
相關問題