工作時,當我嘗試我的java程序連接到服務器,我得到這個異常:如何解決「CommunicationsException:通信鏈接失敗」用JDBC和Android應用
CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
所以,我發現這些指令:
如果你得到的SQLException:連接被拒絕或連接超時 或MySQL的具體CommunicationsException:通信鏈路 失敗,那麼就意味着數據庫是不可達的。這可能是 有一個或多個以下原因:
- JDBC URL中的IP地址或主機名是錯誤的。
- 本地DNS服務器無法識別JDBC URL中的主機名。
- JDBC URL中的端口號缺失或錯誤。
- 數據庫服務器已關閉。
- 數據庫服務器不接受TCP/IP連接。
- 數據庫服務器已用盡連接。
- Java和DB之間的東西阻塞連接,例如一個 防火牆或代理。
爲了解決一個或另一個,遵循以下建議:
- 驗證,並用ping測試。
- 刷新DNS或改爲使用JDBC URL中的IP地址。
- 根據MySQL.cn的my.cnf驗證。
- 啓動數據庫。
- 驗證mysqld是否在沒有--skip-networking選項的情況下啓動。
- 重新啓動數據庫並相應地修復您的代碼,最終關閉 連接。
- 禁用防火牆和/或配置防火牆/代理以允許/轉發端口 。
從this的answere。
我試過每一個選項,但我不知道如何用'my.ini'配置文件來驗證端口號(選項3)。另外,我發現services.msc列表中缺少'MySQL'服務,但我確實使用了端口3306。它與問題有關嗎? 「my.ini」配置文件應該如何顯示? 我使用MySQL Workbench 5.2.47。 (MySQL服務器版本是5.6)。
我的連接代碼:
private MySQLConnectivity() {
try { Class.forName("com.mysql.jdbc.Driver"); Connect();
} catch (ClassNotFoundException e)
{ // TODO Auto-generated catch block e.printStackTrace(); }
}
public void Connect() { try { MySQLConnectivity.Conn = (Connection)DriverManager.getConnection(URL, USER, PASS);
} catch (SQLException e)
{ // TODO Auto-generated catch block e.printStackTrace();
} finally { }
我的連接代碼:私人MySQLConnectivity() \t { \t \t嘗試 \t \t { \t \t \t類。的forName( 「com.mysql.jdbc.Driver」); \t \t \t Connect(); \t \t} \t \t趕上(ClassNotFoundException的E) \t \t { \t \t \t // TODO自動生成的catch程序塊 \t \t \t e.printStackTrace(); \t \t} \t} \t \t 公共無效連接() \t { \t \t嘗試 \t \t { \t \t \t MySQLConnectivity.Conn =(連接)的DriverManager.getConnection(URL,USER,PASS); \t \t} \t \t趕上(的SQLException E) \t \t { \t \t \t // TODO自動生成的catch程序塊 \t \t \t e.printStackTrace(); \t \t} \t \t最後 \t \t { \t \t} – 2013-03-20 16:31:15