2

ユーザーが Web サイトを編集できるように、データベースに接続する JDBC ベースのアプリを作成しようとしています。

Eclipse からアプリをテストするたびに、接続タイムアウト エラーが発生し、その理由がわかりません。

それがn00byの質問であれば申し訳ありませんが、私はJDBCが初めてです。どんな助けや提案も大歓迎です。

以下は私のコードです:

try 
{
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    Connection con = DriverManager.getConnection(
        "jdbc:mysql://nkuwebdata.db.8750359.hostedresource.com",
        username,
        password);

    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("Select * FROM tbl_adminLogin");
    while(rs.next())
    {
        String s = rs.getString("name");
        System.out.println(s);
        break;
    }
} catch (SQLException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

以下は、コンソールに出力されているエラー メッセージです。

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException
MESSAGE: Connection timed out: connect

STACKTRACE:

java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at uk.co.majorwebdesigns.ContentManager.connectToAndQueryDatabase(ContentManager.java:100)
    at uk.co.majorwebdesigns.ContentManager.createMenuBar(ContentManager.java:92)
    at uk.co.majorwebdesigns.ContentManager.launch(ContentManager.java:61)
    at uk.co.majorwebdesigns.ContentManager.main(ContentManager.java:133)


** END NESTED EXCEPTION **



Last packet sent to the server was 2 ms ago.
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at uk.co.majorwebdesigns.ContentManager.connectToAndQueryDatabase(ContentManager.java:100)
    at uk.co.majorwebdesigns.ContentManager.createMenuBar(ContentManager.java:92)
    at uk.co.majorwebdesigns.ContentManager.launch(ContentManager.java:61)
    at uk.co.majorwebdesigns.ContentManager.main(ContentManager.java:133)
4

3 に答える 3

1

通常、接続タイムアウトは、データベース サーバーが実行されていないときに発生します。コードに dbname がありません。このリンクをチェックしてください

Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
conn = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password");
conn.close();
于 2013-04-01T06:01:26.937 に答える
1

いくつかのこと: ローカルではlocalhost:3306なくネット経由のデータベースは、ファイアウォールを通過する必要があります。

ポートが適切な場合があります。MySQL の場合、デフォルトは 3306 ですlocalhost:3306

これらはどちらも接続がないことを意味する可能性があり、エラーを説明します。

物事は閉鎖されるべきです。そうしないと、接続などが不足する可能性があります。これは、try-with-resourcesコンストラクトを使用して行うのが最適です。

そして、PreparedStatements を使用してバックスラッシュと引用符をエスケープし、SQL インジェクションを防ぐ必要があります。

try {
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    try (Connection con = DriverManager.getConnection(
            "jdbc:mysql://nkuwebdata.db.8750359.hostedresource.com",
            username,
            password)) {

        String sql = "SELECT * FROM tbl_adminLogin";
        try (PreparedStatement stmt = con.prepareStatement(sql)) {
            try (ResultSet rs = stmt.executeQuery()) {
                if (rs.next()) {
                    String s = rs.getString("name");
                    System.out.println(s);
                }
            }
        }
    }
}
于 2019-02-27T14:20:45.043 に答える
0

接続の資格情報を確認してから、接続しているサーバーが稼働していることも確認してください。

于 2013-04-01T06:41:31.483 に答える