【问题标题】:Android Communications link failure when minSdkVersion is greater than 9minSdkVersion 大于 9 时 Android 通信链接失败
【发布时间】:2013-10-14 22:15:34
【问题描述】:

使用 mysql-connector-java.5.1.26-bin.jar 将我的 android 应用程序连接到远程 mysql 主机。问题是,任何高于 minSdkVersion 9 的东西都会导致“通信链路故障”。如果我将它设置为 9,它可以正常连接并获取数据库信息。这是我的连接代码:

try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, user, pass);

        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("select * from users");
        ResultSetMetaData rsmd = rs.getMetaData();
        while(rs.next()) {              
           ....
        }
    }
    catch(Exception e) {
        e.printStackTrace();
    }

关于为什么会发生这种情况的任何想法?

【问题讨论】:

  • 不推荐在 Android 设备和 MySQL 服务器之间进行通信。有很多可能出错的地方。请参阅此链接以获取建议:stackoverflow.com/questions/10679588/…
  • 谢谢,我会调查的。

标签: java android mysql jdbc


【解决方案1】:

原来问题是我试图在主要活动中进行网络连接。对于那些可能有同样问题的人,请考虑使用 asynctask 来完成连接。

http://developer.android.com/reference/android/os/AsyncTask.html

【讨论】:

    【解决方案2】:

    这是我的开发环境:

    • 操作系统:Ubuntu14.04
    • IDE:Eclipse Luna
    • 数据库:MySQL5.1.73

    首先,我将下面的代码放在 OnCreate 方法中:

    Class.forName("com.mysql.jdbc.Driver").newInstance();       
    Connection conn = DriverManager.getConnection(url, username,
                            password);
    Statement stmt = conn.createStatement();            
    String sql = "select distinct Action from attributes";
    ResultSet rs = stmt.executeQuery(sql);
    

    连接码没问题,但是会出现:

    通信链路故障。最后一个成功发送到服务器的数据包是 0 毫秒前。驱动没有收到服务器发来的任何数据包。

    所以它一定是在别的地方有问题。尝试各种方法后,使用androidAsyncTask解决。只需将与操作mysql相关的代码放在扩展AsyncTask的Cla​​ss中即可。 以下是我的代码:

    private class Connect extends AsyncTask<String, Void, Void> {
    
            @Override
            protected Void doInBackground(String... urls) {
                try {
                    Class.forName("com.mysql.jdbc.Driver").newInstance();
                    Connection conn = DriverManager.getConnection(url, username,
                            password);
                    Statement stmt = conn.createStatement();
                    String sql = "select distinct Action from attributes";
                    ResultSet rs = stmt.executeQuery(sql);
    
                    List<String> actions = new ArrayList<String>();
                    while (rs.next()) {
                        actions.add(rs.getString("Action"));
                    }
                } catch (Exception e) {
                    Log.d("MySQLConnection", e.getMessage());
                }
                return null;
            }
    
        }
    

    【讨论】:

    • 虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
    猜你喜欢
    • 2012-12-21
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2014-06-09
    相关资源
    最近更新 更多