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



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

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

事实证明,问题是我试图在主活动中建立网络连接。对于那些可能有相同问题的人,请考虑使用 asynctask 来完成连接。

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

这是我的开发环境:

  • 操作系统: 乌班图14.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 毫秒前。驱动程序未从服务器收到任何数据包。

所以它一定是错的。尝试各种方法后,并使用android AsyncTask解决它。只需将与操作mysql相关的代码放在扩展AsyncTask的类中即可。下面是我的代码:

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

相关内容

  • 没有找到相关文章

最新更新