上一篇
安卓开发制作数据库
- 行业动态
- 2025-04-22
- 4
安卓数据库类型选择
数据库类型 | 特点 | 适用场景 |
---|---|---|
SQLite | 轻量级嵌入式数据库,支持SQL语法,无需独立服务器进程 | 本地数据存储、简单应用 |
Room(封装SQLite) | 提供抽象层,支持编译时验证,内置LiveData观察者 | 复杂业务逻辑、MVVM架构项目 |
Realm | 面向对象数据库,高性能读写,支持多平台同步 | 实时数据处理、跨平台项目 |
Firebase Firestore | 云数据库服务,实时同步,无服务器端配置 | 在线协作、实时数据更新应用 |
SQLite数据库操作步骤
创建/打开数据库
SQLiteOpenHelper helper = new SQLiteOpenHelper(context, "db_name", null, version); SQLiteDatabase db = helper.getWritableDatabase();
定义表结构
CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER );
CRUD操作
- 插入数据
ContentValues values = new ContentValues(); values.put("name", "Alice"); values.put("age", 25); db.insert("users", null, values);
- 查询数据
Cursor cursor = db.query("users", null, "age > ?", new String[]{"20"}, null, null, null);
- 更新数据
ContentValues values = new ContentValues(); values.put("age", 26); db.update("users", values, "name = ?", new String[]{"Alice"});
- 删除数据
db.delete("users", "id = ?", new String[]{"1"});
- 插入数据
关闭数据库
db.close();
Room数据库核心组件
组件 | 作用 | 示例代码 |
---|---|---|
@Entity |
定义数据库表结构 | @Entity(tableName = "users") public class User {...} |
@Dao |
定义数据访问接口 | @Dao interface UserDao {...} |
@Database |
配置数据库信息 | @Database(entities = {User.class}) abstract class AppDatabase {...} |
LiveData |
观察数据变化(自动感知更新) | @Query("SELECT FROM users") LiveData<List<User>> getAllUsers(); |
RxJava 支持 |
异步操作(需添加依赖) | Single<List<User>> getUsersByName(String name); |
数据库工具对比
维度 | SQLite | Room | Realm | Firebase Firestore |
---|---|---|---|---|
学习成本 | 低(需手写SQL) | 中(面向对象) | 中(新语法) | 低(云端管理) |
编译时检查 | 无 | 支持 | 无 | 无 |
实时监听 | 需手动实现 | 内置LiveData | 支持数据变更监听 | 实时同步所有客户端 |
离线支持 | 是 | 是 | 是 | 需单独配置缓存 |
复杂查询支持 | 强(原生SQL) | 弱(需@Query注解) | 弱(限制较多) | 中等(通过安全规则) |
常见问题与解答
问题1:如何选择SQLite和Room?
解答:
- 若项目简单且需快速开发,优先使用SQLite,但需手动管理SQL语句和线程安全。
- 若项目采用MVVM架构或需要编译时验证,选择Room,Room通过注解生成代码,减少错误,并提供LiveData支持数据动态更新。
问题2:如何迁移数据库版本?
解答:
- 增加版本号:在
SQLiteOpenHelper
或@Database
中修改版本号(如从1→2)。 - 实现迁移逻辑:
- SQLite:重写
onUpgrade()
方法,执行ALTER TABLE
或数据复制。 - Room:在
@Migration
类中定义新旧表映射关系。
- SQLite:重写
- 测试兼容性:在旧版本数据库上测试升级流程,确保数据