上一篇
安卓开发怎么连接数据库
- 行业动态
- 2025-04-22
- 5
安卓连接数据库的常见方式
安卓应用连接数据库主要分为两种场景:本地数据库(如SQLite)和远程数据库(如MySQL、PostgreSQL),以下是具体实现方式:
本地数据库(SQLite)
SQLite是安卓内置的轻量级数据库,适合存储本地数据,推荐使用Room
框架简化操作。
步骤:
- 添加依赖(
build.gradle
):implementation "androidx.room:room-runtime:2.5.1" annotationProcessor "androidx.room:room-compiler:2.5.1"
- 定义实体类:
@Entity(tableName = "user") public class User { @PrimaryKey(autoGenerate = true) public int id; public String name; public String email; }
- 创建DAO接口:
@Dao public interface UserDao { @Insert void insert(User user); @Query("SELECT FROM user") List<User> getAllUsers(); }
- 初始化数据库:
@Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); }
- 使用数据库:
AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app-db").build(); UserDao userDao = db.userDao(); userDao.insert(new User(0, "张三", "zhangsan@example.com"));
远程数据库(MySQL/PostgreSQL)
需通过网络请求连接远程数据库,通常结合Retrofit
或Volley
发送HTTP请求,后端提供API接口。
步骤:
- 后端准备:部署数据库并编写RESTful API(如Spring Boot、Node.js等)。
- 前端依赖(以Retrofit为例):
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
- 定义API接口:
public interface ApiService { @GET("users") Call<List<User>> getUsers(); @POST("users") Call<User> createUser(@Body User user); }
- 调用API:
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://yourserver.com/api/") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class);
数据库类型对比
特性 | SQLite(本地) | MySQL/PostgreSQL(远程) |
---|---|---|
适用场景 | 离线存储、轻量级数据 | 多设备共享、复杂查询 |
网络依赖 | 无 | 需要网络连接 |
性能 | 高(本地读写) | 依赖网络延迟 |
扩展性 | 单设备 | 支持多用户、大规模数据 |
典型用途 | 用户偏好设置、缓存 | 社交应用、电商后台 |
常见问题与解决方案
网络操作导致主线程卡顿
- 原因:直接在UI线程执行数据库请求。
- 解决方案:使用
AsyncTask
、RxJava
或Coroutine
在子线程处理。// Kotlin协程示例 GlobalScope.launch(Dispatchers.IO) { val users = apiService.getUsers().execute().body() withContext(Dispatchers.Main) { // 更新UI } }
数据库安全风险
- 本地SQLite:启用加密(如
SQLCipher
)。 - 远程数据库:使用HTTPS传输,后端验证Token或API Key。
相关问题与解答
问题1:如何选择合适的数据库类型?
- 回答:根据数据用途选择:
- 本地存储(如用户登录信息、临时缓存):SQLite。
- 跨设备同步(如社交数据、订单信息):远程数据库(需搭配API)。
问题2:安卓能否直接连接MySQL而不通过API?
- 回答:理论上可以,但不推荐:
- 风险:直接暴露数据库IP和端口可能导致安全破绽。
- 替代方案:通过后端服务(如Spring Boot)封装API,前端仅与服务交互