8

我尝试连接mysql database但失败了,并且显示了这个错误

Communications link failure Last packet sent to the server was 1 ms ago

这是我的代码?任何人都可以帮助我

package android_programmers_guide.testconnection;


import java.sql.Connection;
import java.sql.DriverManager;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.widget.EditText;

public class TestConnection extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_connection);



           Connection conn = null;
           String url = "jdbc:mysql://127.0.0.1:3306/test";
           String driver = "com.mysql.jdbc.Driver";
           String userName = "root"; 
           String password = "root";


           try {
           Class.forName(driver).newInstance();
           conn = DriverManager.getConnection(url,userName,password);


           EditText editText=(EditText) findViewById(R.id.editText1);


           editText.setBackgroundColor(Color.GREEN);
           editText.setText("Connected to the database");

           conn.close();

           editText.setBackgroundColor(Color.BLUE);
           editText.setText("Disconnected from database");


           } catch (Exception e) {
           e.printStackTrace();
           }



    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_test_connection, menu);
        return true;
    }

}
4

2 回答 2

1

这个问题是因为您传递的 URL 不起作用。

检查以下事项:

  1. 确保您的 localhost MySQL 正在运行
  2. 通过键入来检查 MySQL 的状态\s
  3. 检查端口号并确保您使用的是相同的端口号。

如果以上所有内容都正确,则可能您没有权限。

使用grant all on *.*“密码”识别,然后运行刷新权限,然后替换127.0.0.1localhost并尝试重新连接。

于 2013-05-07T18:26:23.997 回答
0

android 应用程序无法与同一系统中的mysql通信。因为,当您运行 android 应用程序时,它会在emulator中运行。模拟器是一个 类似于安卓设备的虚拟移动设备。模拟器本身有一个IP地址。因此,根据应用程序的ip 127.0.0.1是模拟器的ip,因此 android 应用程序将尝试与模拟器中的mysql进行通信。众所周知,模拟器中不能有mysql,通信会失败。您可以使用SQLite用于数据存储。如果您希望您的 android 应用程序与mysql通信,您需要在另一个系统中安装mysql并提供该系统的ip。修改您的代码如下:

String url = "jdbc:mysql://192.168.1.102:3306/test";

在这里,我提到192.168.1.102的是第二个系统的ip。并且不要忘记在尝试之前对这些系统进行物理连接。

附加知识:- mysql与 android 应用程序的直接通信不是正确的方法。制作一个与mysql通信的 Web 应用程序。在其中添加一个Web 服务以将数据存储到mysql中。在 android 应用程序中添加一个 web 层,它通过这个 web 服务与 web 应用程序通信。您可以使用xmlJSON通过 web 服务将数据从 android 应用程序传输到 web 应用程序。web 应用程序应该将数据存储到 mysql 中由 android 应用程序的 Web 服务调用接收。

于 2012-12-04T10:25:54.027 回答