上一篇
安卓从mysql数据库数据
- 行业动态
- 2025-04-24
- 2827
安卓无法直连MySQL,需通过服务器端脚本或API间接获取数据,后端查询MySQL后返回,安卓处理结果,注意
MySQL数据库配置
安装与初始化
- 在服务器或本地主机安装MySQL数据库(如MySQL Community Server)。
- 创建数据库和表,
CREATE DATABASE myapp; USE myapp; CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), email VARCHAR(50) );
- 插入测试数据:
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');
配置远程访问
- 修改MySQL配置文件(
my.cnf
或my.ini
),允许外部IP访问:[mysqld] bind-address = 0.0.0.0
- 重启MySQL服务,并授权用户权限:
GRANT ALL PRIVILEGES ON myapp. TO 'username'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
- 修改MySQL配置文件(
安卓端准备工作
添加网络权限
在AndroidManifest.xml
中声明网络权限:<uses-permission android:name="android.permission.INTERNET" />
依赖库配置
- 添加网络请求库(如Retrofit)和JSON解析库(如Gson):
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
- 添加网络请求库(如Retrofit)和JSON解析库(如Gson):
定义数据模型
创建与MySQL表结构对应的Java类:public class User { private int id; private String name; private String email; // Getter和Setter方法 }
服务器端API开发
技术选型
| 工具/框架 | 说明 |
|—————-|—————————–|
| Spring Boot | Java快速构建RESTful API |
| Node.js + Express | JavaScript轻量级后端方案 |
| PHP + Laravel | 传统Web框架 |示例:Spring Boot API
创建
UserController
:@RestController @RequestMapping("/api/users") public class UserController { @Autowired private UserRepository userRepository; // JPA接口 @GetMapping public List<User> getAllUsers() { return userRepository.findAll(); } }
配置跨域(CORS):
@Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/") .allowedOrigins("") // 允许所有域名 .allowedMethods("GET", "POST"); } }; } }
安卓端数据交互流程
定义Retrofit接口
public interface ApiService { @GET("api/users") Call<List<User>> getUsers(); }
发起网络请求
Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://your-server-ip:8080/") // 替换为实际地址 .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); apiService.getUsers().enqueue(new Callback<List<User>>() { @Override public void onResponse(Call<List<User>> call, Response<List<User>> response) { if (response.isSuccessful()) { List<User> users = response.body(); // 更新UI(需切换到主线程) } } @Override public void onFailure(Call<List<User>> call, Throwable t) { // 处理错误 } });
安全与优化建议
风险点 | 解决方案 |
---|---|
SQL注入攻击 | 使用预编译语句(PreparedStatement)或ORM框架(如Hibernate/JPA) |
明文传输数据 | 启用HTTPS(SSL/TLS证书) |
API密钥泄露 | 使用环境变量存储敏感信息,限制IP白名单 |
并发性能瓶颈 | 添加分页查询、索引优化、连接池配置 |
相关问题与解答
问题1:为什么安卓不能直接连接MySQL?
解答:
- MySQL是基于Socket的客户端-服务器架构,安卓设备需通过公网IP或域名访问,存在安全风险。
- 直接暴露MySQL端口可能导致暴力破解或DDoS攻击,建议通过中间层API转发请求。
- 安卓应用需适配不同网络环境(如蜂窝网络、WiFi),直接连接稳定性差。
问题2:如何测试服务器端API是否可用?
解答:
- 使用Postman或cURL:发送GET请求到
http://your-server-ip:8080/api/users
,验证是否能返回JSON数据。 - 浏览器访问:在浏览器输入API地址,若返回数据则说明服务正常。
- 安卓模拟器调试:在
adb logcat
中查看网络请求日志,确认请求是否成功发出