0

データベースのアクセス許可やファイアウォールの設定に関するこの問題に関する投稿をたくさん見てきましたが、別の問題があるようです。

「com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure. The last packet sent successfully to the server was 0 milliseconds before. The driver has not received any packet from the server.」というエラー メッセージが表示されます。Android アプリケーションからリモート データベースへの jdbc 接続を開こうとしたとき。

まったく同じJavaクラスを使用して別のアプリケーションから接続して変更を加えることができるため、アクセス許可、ファイアウォール、またはデータベースの可用性の問題ではないことはわかっています。この機能はコードの以前の反復で正常に機能していましたが、現在問題を引き起こしています。同じ方法で呼び出されます。唯一の違いは、一方のプロジェクトでは Android アプリケーションであり、もう一方のプロジェクトでは通常の Java アプリであるということです。問題が何であるかについて何か考えがある場合は、私に知らせてください。私が使用しているクラスは次のとおりです。

public class DatabaseHandler{

private static String address;
private String username;
private String password;
private static Connection con;

public DatabaseHandler(String url, String un, String pw){
    address = "jdbc:mysql://[remote server IP]:3306/nfcgeo";
    username = un;
    password = pw;
}

public void openDB() throws Exception{
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        con = DriverManager.getConnection(address, username, password);
}

Android アプリケーションの MainMenu クラスでは、次のようになります。

 public void onCreate(Bundle savedInstanceState)
{
    setupDatabaseConnection(context);
    if(!dbAvailable)
    {
        noDatabaseConnection(context);       

    }

public static void setupDatabaseConnection(Context _context)
{
    try
    {
    dbHandle = new DatabaseHandler("","root","rootpw");
    dbHandle.openDB();
    dbAvailable = true;
    }
    catch(Exception e)
    {
        dbAvailable = false;
        e.printStackTrace();
    }
}

繰り返しますが、DatabaseHandler クラスは、Android アプリケーションの外部で使用すると完全に機能します。メイン メニューから呼び出された場合にのみ例外が発生します。誰かアイデアがあれば教えてください。ありがとう。

4

1 に答える 1

0

これは、ここでユーザー名として指定する u という名前のユーザーにサーバーが許可を割り当てられていないために発生しています。

したがって、データベースでコマンドを実行する必要があります

  1. all on *.* を somepassword username で識別されるユーザー名に付与します。これを使用してデータベース パスワードに接続します。これを使用して dB に接続します。したがって、接続文字列は jdbc:mysql://ip:3306/dbname,username,password になります
  2. 特権のフラッシュ (スペル チェック)
  3. それでもうまくいかない場合は、bind-address:your ip を bind-address:0.0.0.0 に置き換えます。このファイルは、mysql インストール ディレクトリ内にあります。
于 2013-04-19T16:19:13.760 に答える