2012-05-03 87 views
1

我做了一個訪問數據庫的Java程序。在開發階段我用了一個本地數據庫(XAMPP與MySQL),但是當我試圖訪問2個不同的在線數據庫(商業和免費的),我在這兩種情況下收到了以下異常:用Java訪問在線數據庫

SQLException:通信鏈路故障
成功發送到服務器的最後一個數據包是0毫秒,前 。驅動程序尚未收到來自服務器的任何數據包。

我沒有任何問題,他們用PHP。

這是我的代碼:

private String user = "user1"; 
private String pass = "pass1"; 
private String dbClass = "com.mysql.jdbc.Driver"; 
private String dbDriver = "jdbc:mysql://db4free.net:3306/DBNAME"; 
private Connection conn = null; 

public boolean connect() { 
    boolean done = false; 
    //load driver 
    try { 
     Class.forName(dbClass).newInstance(); 
     System.out.println("driver loaded"); // THIS IS BEING RETURNED 
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) { 
     System.err.println(ex); 
    } 
    // Connection 
    try { 
     conn = DriverManager.getConnection(dbDriver, user, pass); 
     System.out.println("connected"); // THIS IS NOT BEING RETURNED 
     done = true; 
    } catch (SQLException ex) { 
     System.out.println("SQLException: " + ex.getMessage()); 
    } 
    return done; 
} 
+1

防火牆的java代碼? – esej

+0

我怎麼弄出來的? – user1170330

+0

嘗試從命令行首先連接mysql客戶端;看看你是否可以達到它。 –

回答

0

MySQL數據庫不僅允許用戶使用特定的密碼進行連接,但也從一個IP範圍或地址。

http://dev.mysql.com/doc/refman/5.1/en/create-user.html

CREATE USER 'jeffrey'@'127.0.0.1' IDENTIFIED BY 'mypass';

因此,這可能是網上數據庫不允許用戶從您的IP地址或塊連接。

0

你的代碼,很適合我在新創建的帳戶db4free:

檢查下列事項:

Should show either your public ip or a single %

Your username and password is correct, will also verify your account is confirmed.

的 「DBNAME」 是正確的,日誌在db4free.net的「phpMyAdmin-Login:」上,DBNAME將位於「information_schema」的左上方

最後,你的本地防火牆不會阻止你:

telnet db4free.net 3306 (from a command line/prompt) 

(如果你得到一個提示,您的防火牆通過讓你。)

+0

'無法打開連接到主機,端口3306:連接失敗'是否因爲我的防火牆? – user1170330

+0

這是可能的,但我怎麼知道?無論如何,現在你知道一些事情。 – esej

+0

因此,我的軟件無法在大多數機器上運行?即使它是無害的,只是試圖連接到一個簡單的數據庫,防火牆會/可以阻止它? – user1170330

0

。在你的代碼中沒有提到的端口號。這是工作代碼的例子。

try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException e) { 
      System.out.println(" Unable to load driver. "); 
     } 
     String url = "jdbc:mysql://DBSERVERNAME:3306/DATABASENAME"; 
     String username = "user"; 
     String password = "pass"; 
     try { 
      this.conn = DriverManager.getConnection(url, username, password); 
      System.out.println(" Connection Established. "); 
     } catch (SQLException e) { 
      System.out.println(" Error connecting to database: " 
        + e); 
     } 

但是,這個問題可能有幾個原因。

  • 如果hostmachine(您正在運行此代碼的機器)有權訪問MySql服務器,請檢查您的MySQL服務器設置?
  • 驗證JDBC URL,檢查端口號,IP地址/主機名
  • 檢查,如果有什麼(如防火牆,代理服務器)阻止對數據庫服務器的主機連接
  • 嘗試從hostmachine查驗DB服務器

類似的帖子:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure

-1
static private String user = "ajaykakkar"; 
static private String pass = "ajaykakkar7432"; 
static private String dbClass = "com.mysql.jdbc.Driver"; 

//它 - - - 「的jdbc:mysql的://www.db4free.net:3306/yourdatabasename_ark」;

static private String dbDriver = "jdbc:mysql://www.db4free.net:3306/yourdatabasename_ark"; 
static private Connection conn = null; 

public static boolean connect() { 
    boolean done = false; 
    //load driver 
    try { 
     Class.forName(dbClass).newInstance(); 
     System.out.println("driver loaded"); // THIS IS BEING RETURNED 
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) { 
     System.err.println(ex); 
    } 
    // Connection 
    try { 
     conn = DriverManager.getConnection(dbDriver, user, pass); 
     System.out.println("connected"); // THIS IS NOT BEING RETURNED 
     done = true; 
    } catch (SQLException ex) { 
     System.out.println("SQLException: " + ex.getMessage()); 
    } 
    return done; 
} 

public static void main(String args[]) { 

    connect(); 

} 

// @通過做ajay.r.kakkar

+0

對於如何以及爲何解決問題添加一些解釋是很常見的。 – sidneydobber

0

我想可能是因爲防火牆的問題,一般的服務器可能會在127.0.0.1 IP地址被監聽,所以你訪問我的SQL只能從本地系統中將其更改爲配置文件中的0.0.0.0,然後才能開始工作。