使用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();
}
有关为何发生这种情况的任何想法?
答案 0 :(得分:0)
原来问题是我试图在主要活动中建立网络连接。对于可能存在相同问题的用户,请查看使用asynctask来完成连接。
http://developer.android.com/reference/android/os/AsyncTask.html
答案 1 :(得分:0)
这是我的开发环境:
首先,我将下面的代码放在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的Class中运行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;
}
}