安卓应用通常使用哪种数据库?有没有什么特定推荐?
- 内容介绍
- 文章标签
- 相关推荐
在 Android 开发中,数据库的选型直接决定了应用的性能可维护性还有开发效率。如果你正面临以下痛点,先别急着写代码: - 数据量急速增长导致查询慢、卡顿;- 频繁变更表结构却不想手动写迁移脚本;- 需要跨设备实时同步但又不想引入完整的后端;- 团队成员对 SQL/ORM 的掌握程度差异较大。
1️⃣ SQLite——Android 原生的轻量级存储
SQLite 是 Android 程序自带的嵌入式关系型数据库,无需额外服务器。它体积小、启动快,适合存储配置、缓存、离线数据等。
典型使用场景
- 单机小型应用
- 需要原生 SQL 操作且团队熟悉 JD娱乐 风格
- 对事务支持要求高。但不需要复杂迁移逻辑
示例代码
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(
context.getFilesDir + "/app.db",null);老实说,db.execSQL("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY。name TEXT,age INTEGER)");不过,ContentValues values = new ContentValues;values.put,说起来,values.put;按理说,db.insert;db.close,
2️⃣ Room——官方 ORM 框架。简化 SQLite 接口
Room 在 SQLite 基础上提供编译时检查 SQL、类型安全和 LiveData 支持,极大减少运行时错误与样板代码。
- 项目已稳定使用 SQLite,但想避免手写 SQL 错误
- 需要自动化迁移和测试覆盖率高的项目
- Coding 时希望 IDE 能提示错误而非运行时崩溃
@Entity
public class User {
@PrimaryKey public int id;public String name;public int age;}
@Dao
public interface UserDao {
@Query
User getUserById;}
@Database
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao;其实,}
// 使用
AppDatabase db = Room.databaseBuilder(context。AppDatabase.class,"app.db").build;UserDao dao = db.userDao;User user = dao.getUserById;
3️⃣ Realm——跨网站高速 NoSQL 引擎
Realm 用 C++ 写成。封装了内存映射文件和即时同步,可实现毫秒级读写。其实,支持多线程且无锁设计,非常适合游戏或实时聊天类应用。
- MVP / MVVM 项目中需要 LiveData/Flow 自动更新 UI
- AWS/Google Cloud 等后端已配套 Realm Sync 服务
- I/O 密集且需要在后台线程安全操作
Realm.init;RealmConfiguration config = new RealmConfiguration.Builder
.name
.build;Realm realm = Realm.getInstance;
realm.executeTransaction(r -> {
User user = r.createObject;user.setName;user.setAge,});// 自动提交并关闭事务
realm.close;// 记得释放资源
}
4️⃣ GreenDAO/DBFlow——Java 对象映射加速器
痛点提醒: 如果你团队已有大量 Java ORM 经验且追求“零配置 + 高性能”,GreenDAO 或 DBFlow 是不错选择。但请注意这方面,生成代码会占用编译时间,过度抽象可能隐藏底层细节。
GreenDAO 示例
DaoMaster.DevOpenHelper helper =
new DaoMaster.DevOpenHelper;SQLiteDatabase db = helper.getWritableDb;话说回来,DaoSession session =
new DaoMaster.newSession;UserDao dao = session.getUserDao;dao.insert),User u=dao.load;// 主键查询
dao.delete;// 删除实体
}
DBFlow 示例
@Table
public class User extends BaseModel{
@PrimaryKey public long id;public String name;public int age;}
...
long rowId=DB.select.from.where)
.executeSingle;// 简洁链式查询
...
5️⃣ Firebase Realtime Database / Firestore——云端实时同步方案
痛点提醒: 若你的应用需要多设备间即时数据同步。不想自己搭建后端,可以考虑 Firebase;但要注意网络费用与隐私合规性。其实,
根据业务需求做权衡
| 数据库类型 | 适用场景 | 优缺点摘要 | |
|---|---|---|---|
| SQLite | 小规模离线存储 - 无需服务器 - 手工维护 SQL - 迁移困难 | 从优势来看。轻量级、标准 SQL,劣势:易出错、手工迁移费劲 | 快速启动;说起来,适合单机小程序或老旧项目。 |
| Room | 中大型项目 - 想保留 SQLite 性能 - 想提高开发效率 | 从优势来看,类型安全、编译检查、LiveData 支持;劣势:略多样板代码 | 推荐用于大多数 Android 应用。怎么说呢, |
| Realm | 高并发实时交互 - 游戏 / 聊天 / 实时协作 | 至于优势。速度快、多线程友好,同步功能强;说起来,劣势:学习曲线稍陡 | 如果你需要即时同步或性能较强。可优先考虑, |
| GreenDAO / DBFlow | 公司级 Java 项目 - 已有 ORM 成熟程序 | 至于优势,高效 CRUD、自动生成 DAO;按理说,劣势:生成文件庞大、不易调试 | 适用于已有 JavaORM 大军或对性能有极致追求者。 |
| Firebase Realtime DB / Firestore | 多终端即时协同 - 聊天 / 协同编辑 | 优势:全托管、自带离线缓存和推送;劣势:成本与隐私风险 | 如果你不想自己搭建服务器,可直接接入。 |
`
在 Android 开发中,数据库的选型直接决定了应用的性能可维护性还有开发效率。如果你正面临以下痛点,先别急着写代码: - 数据量急速增长导致查询慢、卡顿;- 频繁变更表结构却不想手动写迁移脚本;- 需要跨设备实时同步但又不想引入完整的后端;- 团队成员对 SQL/ORM 的掌握程度差异较大。
1️⃣ SQLite——Android 原生的轻量级存储
SQLite 是 Android 程序自带的嵌入式关系型数据库,无需额外服务器。它体积小、启动快,适合存储配置、缓存、离线数据等。
典型使用场景
- 单机小型应用
- 需要原生 SQL 操作且团队熟悉 JD娱乐 风格
- 对事务支持要求高。但不需要复杂迁移逻辑
示例代码
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(
context.getFilesDir + "/app.db",null);老实说,db.execSQL("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY。name TEXT,age INTEGER)");不过,ContentValues values = new ContentValues;values.put,说起来,values.put;按理说,db.insert;db.close,
2️⃣ Room——官方 ORM 框架。简化 SQLite 接口
Room 在 SQLite 基础上提供编译时检查 SQL、类型安全和 LiveData 支持,极大减少运行时错误与样板代码。
- 项目已稳定使用 SQLite,但想避免手写 SQL 错误
- 需要自动化迁移和测试覆盖率高的项目
- Coding 时希望 IDE 能提示错误而非运行时崩溃
@Entity
public class User {
@PrimaryKey public int id;public String name;public int age;}
@Dao
public interface UserDao {
@Query
User getUserById;}
@Database
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao;其实,}
// 使用
AppDatabase db = Room.databaseBuilder(context。AppDatabase.class,"app.db").build;UserDao dao = db.userDao;User user = dao.getUserById;
3️⃣ Realm——跨网站高速 NoSQL 引擎
Realm 用 C++ 写成。封装了内存映射文件和即时同步,可实现毫秒级读写。其实,支持多线程且无锁设计,非常适合游戏或实时聊天类应用。
- MVP / MVVM 项目中需要 LiveData/Flow 自动更新 UI
- AWS/Google Cloud 等后端已配套 Realm Sync 服务
- I/O 密集且需要在后台线程安全操作
Realm.init;RealmConfiguration config = new RealmConfiguration.Builder
.name
.build;Realm realm = Realm.getInstance;
realm.executeTransaction(r -> {
User user = r.createObject;user.setName;user.setAge,});// 自动提交并关闭事务
realm.close;// 记得释放资源
}
4️⃣ GreenDAO/DBFlow——Java 对象映射加速器
痛点提醒: 如果你团队已有大量 Java ORM 经验且追求“零配置 + 高性能”,GreenDAO 或 DBFlow 是不错选择。但请注意这方面,生成代码会占用编译时间,过度抽象可能隐藏底层细节。
GreenDAO 示例
DaoMaster.DevOpenHelper helper =
new DaoMaster.DevOpenHelper;SQLiteDatabase db = helper.getWritableDb;话说回来,DaoSession session =
new DaoMaster.newSession;UserDao dao = session.getUserDao;dao.insert),User u=dao.load;// 主键查询
dao.delete;// 删除实体
}
DBFlow 示例
@Table
public class User extends BaseModel{
@PrimaryKey public long id;public String name;public int age;}
...
long rowId=DB.select.from.where)
.executeSingle;// 简洁链式查询
...
5️⃣ Firebase Realtime Database / Firestore——云端实时同步方案
痛点提醒: 若你的应用需要多设备间即时数据同步。不想自己搭建后端,可以考虑 Firebase;但要注意网络费用与隐私合规性。其实,
根据业务需求做权衡
| 数据库类型 | 适用场景 | 优缺点摘要 | |
|---|---|---|---|
| SQLite | 小规模离线存储 - 无需服务器 - 手工维护 SQL - 迁移困难 | 从优势来看。轻量级、标准 SQL,劣势:易出错、手工迁移费劲 | 快速启动;说起来,适合单机小程序或老旧项目。 |
| Room | 中大型项目 - 想保留 SQLite 性能 - 想提高开发效率 | 从优势来看,类型安全、编译检查、LiveData 支持;劣势:略多样板代码 | 推荐用于大多数 Android 应用。怎么说呢, |
| Realm | 高并发实时交互 - 游戏 / 聊天 / 实时协作 | 至于优势。速度快、多线程友好,同步功能强;说起来,劣势:学习曲线稍陡 | 如果你需要即时同步或性能较强。可优先考虑, |
| GreenDAO / DBFlow | 公司级 Java 项目 - 已有 ORM 成熟程序 | 至于优势,高效 CRUD、自动生成 DAO;按理说,劣势:生成文件庞大、不易调试 | 适用于已有 JavaORM 大军或对性能有极致追求者。 |
| Firebase Realtime DB / Firestore | 多终端即时协同 - 聊天 / 协同编辑 | 优势:全托管、自带离线缓存和推送;劣势:成本与隐私风险 | 如果你不想自己搭建服务器,可直接接入。 |
`

