0

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

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

4

2 回答 2

0

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

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

于 2013-10-15T22:42:32.700 回答
0

这是我的开发环境:

  • 操作系统:Ubuntu14.04
  • IDE:日食月神
  • 数据库: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的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;
        }

    }
于 2015-03-03T01:33:47.247 回答