上一篇
2025年8月最新动态
随着安卓14的普及和MySQL 8.3的发布,移动端与数据库的直接连接方案有了更多优化,谷歌近期在开发者文档中强调,虽然推荐使用Firebase等云端方案,但传统JDBC方式在特定场景下仍不可替代。
你可能发现了,现在教程动不动就让你用PHP做中转,或者上Firebase,原因很简单:
但如果你就是需要直连(比如内网应用),往下看具体方案。
-- 创建远程访问账号 CREATE USER 'android_user'@'%' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON your_db.* TO 'android_user'@'%'; FLUSH PRIVILEGES; -- 修改my.cnf [mysqld] bind-address = 0.0.0.0 -- 允许所有IP连接
在build.gradle
添加依赖:
implementation 'mysql:mysql-connector-java:8.0.30'
核心连接代码(记得放子线程!):
new Thread(() -> { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://192.168.1.100:3306/your_db", "android_user", "StrongPassword123!" ); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM users"); while(rs.next()) { Log.d("DB_DATA", rs.getString("username")); } conn.close(); } catch (Exception e) { e.printStackTrace(); } }).start();
⚠️ 致命问题:这么写会被安全扫描工具秒杀!解决方案:
这才是正经做法,用Spring Boot写个简单接口:
@RestController public class UserController { @Autowired private UserRepository repo; @GetMapping("/api/users") public List<User> getUsers() { return repo.findAll(); // 这里用JPA操作MySQL } }
安卓端用Retrofit请求:
interface ApiService { @GET("api/users") suspend fun getUsers(): List<User> } // 调用示例 val retrofit = Retrofit.Builder() .baseUrl("http://your_server_ip:8080/") .build() val service = retrofit.create(ApiService::class.java) val users = service.getUsers()
网络权限别忘了:
<uses-permission android:name="android.permission.INTERNET" />
主线程限制:所有网络请求必须异步处理
超时设置:
OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .build();
数据加密:至少用HTTPS,别传明文密码
除非是做智能家居这类局域网应用,否则真不建议安卓直连MySQL,现在云数据库价格也不贵,阿里云RDS最便宜套餐一个月不到一杯奶茶钱,还自带备份和安全防护,如果项目刚开始,直接用Firestore可能更省心。
有具体问题欢迎讨论,特别是遇到SSLHandshakeException
这类错误的,评论区见!
本文由 壤驷宜修 于2025-08-01发表在【云服务器提供商】,文中图片由(壤驷宜修)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/505898.html
发表评论