下面的代码,我说一说我解决方法:
- 关闭mysql服务器的防火墙。
- 加入mysql的jdbc包,添加到libs文件夹内。
- ADT和SDK为16及16以下,17以上的不能访问。(这个是用的线程解决的,SDK16以上用线程)
- 手机和mysq服务器l互相ping通。
- 添加网络权限 :
- 在Thread中连接访问mysql,防止ANR。
- 设置mysql允许远程连接。
这几个问题都排除了,手机可以ping通服务器。
另外我也clean项目重启了,数据库是检查了很多遍,也没问题,用Navicat测试了sql语句没问题。
项目也不报错,真心不知道怎么弄了。关于驱动包的问题,官网下载的,服务器是MySql5.7.38,驱动包用的5.1.49,测试了6个版本驱动包,按照MySql官网的说明,这个版本就可以。求帮忙看看了,执行代码后Log.e输出的rs变量结果是null,connection也是空值,说明在连接数据库一步就不正常,实在想不出来还有什么问题了。
new Thread(new Runnable() {
@Override
public void run() {
try {
Class.forName("com.mysql.jdbc.Driver");//加载jdbc驱动
String url = "jdbc:mysql://填写了服务器ip:3306/ZY?useSSL=false&serverTimezone=UTC";//连接数据库的链接
String login_name = "用户名";//MySql登录名
String login_password = "密码";//MySql密码
Connection connection = DriverManager.getConnection(url, login_name, login_password);
String sql = "SELECT ZH from dlzc where ZH='admin'";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
resultSet.first();
rs = resultSet.getString("ZH");
while (resultSet.next()) {
Log.e(TAG, "卧槽" + resultSet.getString(1));
}
resultSet.close();
connection.close();
statement.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}).start();
Log.e(TAG, "测试: " + rs);