当minSdkVersion大于9时,Android Communications链接失败

时间:2013-10-14 22:15:35

标签: java android mysql jdbc

使用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();
    }

有关为何发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:0)

原来问题是我试图在主要活动中建立网络连接。对于可能存在相同问题的用户,请查看使用asynctask来完成连接。

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

答案 1 :(得分:0)

这是我的开发环境:

  • 操作系统:Ubuntu14.04
  • IDE:Eclipse Luna
  • DB: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毫秒前。驱动程序未收到来自服务器的任何数据包。

所以在其他方面肯定是错的。尝试各种方法后,使用android AsyncTask解决它。只需将代码相对于在扩展AsyncTask的Cla​​ss中运行mysql。 以下是我的代码:

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;
        }

    }