1

データベースにアクセスする Java プログラムを作成しました。開発段階では、ローカル データベース (XAMPP と MySQL) を使用しましたが、2 つの異なるオンラインデータベース (商用と無料) にアクセスしようとすると、両方のケースで次の例外が発生しました。

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;
}
4

5 に答える 5

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 アドレスから接続したり、ブロックしたりすることを許可していない可能性があります。

于 2012-05-03T20:28:00.920 に答える
0

あなたのコードは、db4free で新しく作成されたアカウントでうまく機能します。

次のことを確認してください。

パブリック IP または単一の % のいずれかを表示する必要があります

ユーザー名とパスワードが正しく、アカウントが確認されていることも確認されます。

「DBNAME」が正しいことを確認し、 db4free.netの「phpMyAdmin-Login:」にログインします。DBNAMEは「information_schema」の左上にあります。

最後に、ローカル ファイアウォールがあなたをブロックしていないことを確認します。

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

(プロンプトが表示された場合、ファイアウォールは通過を許可します。)

于 2012-05-03T20:50:26.167 に答える
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 サーバーへのアクセス権限があるかどうか、MySQL サーバーの設定を確認してください。
  • JDBC URL を確認し、ポート番号、IP アドレス/ホスト名を確認します
  • ホストから db サーバーへの接続をブロックするもの (ファイアウォール、プロキシなど) があるかどうかを確認します
  • ホストマシンからDBサーバーにpingを実行してみてください

同様の投稿: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure

于 2012-05-03T20:59:08.913 に答える