Android项目中的通信链接错误

时间:2012-12-04 05:26:37

标签: android mysql jdbc

我在这个问题上看过很多关于数据库权限或防火墙设置的帖子,但我似乎遇到了不同的问题。

我收到错误消息" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败。成功发送到服务器的最后一个数据包是0毫秒前。驱动程序未收到来自服务器的任何数据包。"尝试从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();
    }
}

同样,如果在android应用程序之外使用,DatabaseHandler类可以正常工作,我只能在从主菜单调用时获得异常。如果有人有任何想法,请告诉我。感谢。

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为服务器没有分配给名为u的用户的权限,此处提供用户名

因此您需要在数据库上运行命令

  1. 将所有*。*授予由somepassword标识的用户名 用户名 - 您将使用它连接到数据库 密码 - 您将使用它连接到dB。 所以连接字符串现在将是 jdbc:mysql:// ip:3306 / dbname,username,password
  2. 刷新权限(检查拼写)
  3. 如果仍然无法更换bind-address:你的ip到bind-address:0.0.0.0。 这个文件将在mysql安装目录中。