2012-10-30 128 views
0

我是一名java初學者,我正在研究一個使用JDBC連接到遠程mysql數據庫的簡單應用程序。我已經在本地測試過它,它工作得很好,但是我無法讓它在我的遠程服務器上工作。 我不認爲它沒什麼用,但繼承人的代碼:使用JDBC連接到mysql遠程數據庫?

Connection connection = null; 
String dburl = "jdbc:mysql://314159265:3306/Db_Name"; 
String userName = "user"; 
String passWord = "password"; 

    try { 
     Class.forName("com.mysql.jdbc.Driver"); 

     connection = DriverManager.getConnection(dburl, userName, passWord); 
     Statement st = connection.createStatement();         

     String query = "INSERT INTO Example (`TestColumn`) VALUES('hello')"; 
     int rsI = st.executeUpdate(query); 
     System.out.println("Hi"); 
     }catch (Exception e) { 
     System.out.println(e); 
    } finally { 
     if (connection != null) { 
      try { 
       connection.close(); 
       System.out.println("Database connection terminated"); 
      } catch (Exception e) { /* ignore close errors */ } 
     } 
    } 

當我運行它,我得到以下信息:

com.mysql.jdbc.exceptions.jdbc4.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. 

我敢肯定那一定是某種的服務器配置問題。

Notes: 
Username, password, IP, database name, etc. are just examples. 
+2

就在這裏猜測,但是你的主人真的是314159265?這應該是某種IP還是真的是DNS名稱? – btiernay

+0

在訪問驅動程序之前,您是否必須設置某種ssh/ssl隧道到遠程服務器?另外 - 您可以使用客戶端系統上的遠程查詢瀏覽器訪問數據庫嗎?從內存中,我認爲你必須配置它以便暴露數據庫,默認情況下,我非常確定數據庫只在本地主機上可用,所以當你連接到JDBC時,你將被拒絕。我敢打賭你的java代碼和數據庫在同一臺服務器上工作 – FaddishWorm

+0

你能從你的機器(你運行該程序的地方)到達那臺機器'31415 ...'嗎?嘗試ping那個「地址」或telnet到端口3306 – kolossus

回答

2
  1. 這可能是一個防火牆的問題,或配置問題。但我不認爲這是一個編碼問題 - 您需要開始排除連接故障。

  2. 嘗試使用第三方客戶端應用程序連接到MySQL時發生故障。這將表明它是否配置爲外部訪問。儘管它不能確保JDBC從外部可見,但它確實排除了一些潛在的防火牆問題。

  3. 按照本指南,以幫助你惹你的配置

Remote MYSQL Database Access

如果你仍然堅持,它可能是一個編碼的問題,所以看看這個頁面:

How to connent to a remote mysql database with java?

PS我假設你正在使用Unix作爲操作系統。

+0

事實證明,主機提供商阻止遠程連接到數據庫 – Dangerosking

+1

甜 - 很高興你得到它排序:) – FaddishWorm

-1

我想314159265可以通過一些地址替換.... 如JDBC的:mysql://本地主機:3306/ 或JDBC的:mysql://127.0.0.1:3306/