web-dev-qa-db-ja.com

jdbc:データベースサーバーへの接続を作成できませんでした

Jdbcを使用してmysqlデータベースに接続しようとしています。データベース接続クラスは次のとおりです。

public class Database {
    String userName = "myUserName";
    String password = "myPass";

    String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/database_Name?autoReconnect=true&useSSL=false";

    public void connect()
    {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();

            Connection conn = DriverManager.getConnection(url,userName,password);

            Statement statement = conn.createStatement();
            String queryString = "select * from users";
            ResultSet rs = statement.executeQuery(queryString);
            while (rs.next()) {
                System.out.println(rs.getString(2));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

今のところ、次のようなメソッドを呼び出していると仮定できます。

new Database().connect();

そして、私はこの例外を受け取ります:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:425)
    at com.mysql.jdbc.Util.getInstance(Util.Java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:918)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:897)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:886)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:860)
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.Java:2163)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2088)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:806)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.Java:47)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:410)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:328)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:664)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:247)
    at Database.<init>(Database.Java:17)
    at ServerTest.main(ServerTest.Java:8)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.Java:147)
Caused by: 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.
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:425)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.Java:989)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.Java:341)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.Java:2251)
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.Java:2104)
    ... 19 more
Caused by: Java.net.ConnectException: Connection refused: connect
    at Java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at Java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.Java:79)
    at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:350)
    at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:206)
    at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:188)
    at Java.net.PlainSocketImpl.connect(PlainSocketImpl.Java:172)
    at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)
    at Java.net.Socket.connect(Socket.Java:589)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.Java:211)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.Java:300)
    ... 21 more

*リモートからデータベースにアクセスするために%を追加しました。

* Java部分はlocalhostで機能しますが、このリモートデータベースを試すと失敗します。

*データベースとテーブルが作成されます(これについては問題ありません。)

それで、問題はどこにありますか?

6
Ali İ.

Java部分はlocalhostで機能しますが、このリモートデータベースを試すと失敗します

つまり、MySqlサーバーはlocalhostにバインドされ、外部からは見えません。 MySql confファイルのbind-addressプロパティをホストの実際のIPアドレスに設定してください。

例:bind-address = 192.168.1.26

実際のIPアドレスでは、Javaコードが実行されているクライアントに見える方。これはイントラネットアドレスまたはパブリックIPの可能性があります。パブリックIPを公開する場合はファイアウォール。

3
code