上一篇
安卓如何调用mysql数据库连接
- 行业动态
- 2025-04-22
- 5
前提条件与注意事项
MySQL数据库配置
- 开启远程访问权限:修改
mysql
配置文件(如my.cnf
),确保bind-address
设置为0.0.0
或指定IP。 - 创建用户并授权:为Android应用创建专用数据库用户,并授予对应权限。
CREATE USER 'android_user'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON database_name. TO 'android_user'@'%'; FLUSH PRIVILEGES;
- 开放防火墙端口:确保服务器3306端口(默认MySQL端口)对Android设备IP开放。
Android端限制与风险
- 安全性问题:直接暴露数据库到公网存在SQL注入、暴力破解等风险。
- 网络稳定性:移动设备网络环境复杂,长连接易中断。
- 性能瓶颈:移动端直接操作数据库可能导致响应延迟。
实现步骤与代码示例
添加依赖库
在build.gradle
中添加MySQL JDBC驱动依赖:
dependencies { implementation 'mysql:mysql-connector-java:8.0.33' }
配置网络权限
在AndroidManifest.xml
中声明网络权限:
<uses-permission android:name="android.permission.INTERNET" />
连接数据库代码
// 异步任务执行数据库操作(避免阻塞主线程) new Thread(new Runnable() { @Override public void run() { Connection conn = null; try { // 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 构建连接字符串(替换为实际IP和数据库信息) String url = "jdbc:mysql://192.168.1.100:3306/database_name?useSSL=false&serverTimezone=UTC"; String user = "android_user"; String password = "password"; // 建立连接 conn = DriverManager.getConnection(url, user, password); // 执行查询 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT FROM table_name"); // 处理结果集 while (rs.next()) { Log.d("MySQL", "Column1: " + rs.getString("column1")); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭连接 if (conn != null) { try { conn.close(); } catch (SQLException ignored) {} } } } }).start();
替代方案推荐
方案 | 优点 | 缺点 |
---|---|---|
直接连接MySQL | 开发简单,无需额外服务 | 安全性低,需处理移动网络问题 |
通过Web API间接访问 | 安全性高,可控制权限 | 需要额外开发后端服务 |
使用云数据库服务 | 集成认证、负载均衡 | 可能有vendor锁定风险 |
常见问题与解答
问题1:如何提升移动设备与MySQL连接的安全性?
解答:
- 使用SSL加密连接:在URL中添加
useSSL=true
,并在服务器配置SSL证书。 - 限制IP白名单:仅允许可信IP连接(如
'android_user'@'192.168.1.100'
)。 - 最小化权限:仅为应用分配必要的数据库操作权限。
问题2:如果不想直接连接数据库,有什么替代方案?
解答:
- RESTful API:搭建后端服务(如Spring Boot),通过HTTP接口与数据库交互。
- GraphQL:使用Apollo Server等工具提供灵活的数据查询接口。
- Firebase等BaaS:利用实时数据库或Cloud Firestore,减少自建服务器