2012-05-03 11 views
1

私はデータベースにアクセスするJavaプログラムを作った。開発フェーズの間、私は、ローカル・データベース(MySQLでXAMPP)を使用し、私は2つの異なるオンラインデータベース(商業用および無料の1)にアクセスしようとしたとき、私は両方のケースで、次の例外を受け取っ:Javaでオンラインデータベースにアクセス

SQLException:通信リンクのエラー
サーバーに最後に送信されたパケットは、0ミリ秒前に になりました。ドライバはサーバからパケットを受信して​​いません。

私はPHPで問題なく動作しました。 MySQLデータベースは、ユーザーが特定のパスワードを使用して接続することを可能にするだけでなく、IP範囲またはアドレスからだけではなく、

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

は、これは私のコードです。

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" が正しいことを、ログ「phpMyAdmin-Login:」にdb4free.net、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); 
     } 

ただし、この問題にはいくつかの理由が考えられます。

  • ホストマシン(このコードを実行しているマシン)にMySqlサーバーへのアクセス権があるかどうかチェックしてください。
  • デシベルサーバーにホストからの接続を遮断(ファイアウォール、プロキシなど)何があるかどうhostmachine
  • からDBサーバにpingを試してみてくださいチェック
  • IPアドレス/ホスト名、ポート番号を確認し、JDBC URLを確認してください

同様のポスト: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";私はそれが原因でファイアウォールの問題により、通常サーバは127.0.0.1のIPアドレスでリッスンする可能性があるかもしれないので、あなたが私のSQLにアクセスすると思います

+0

問題をどのように、そしてなぜそれを解決したのかについていくつかの説明を追加するのが慣例です。 – sidneydobber

0

ajay.r.kakkar @によって行わ

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(); 

} 

//ローカルシステムからのみ、設定ファイルで0.0.0.0に変更してください。

関連する問題