当前位置:首页 > 行业动态 > 正文

安卓中的文件数据库

安卓文件存储分内部(私有)和外部(公有),数据库常用SQLite,轻量级,本地存储;ContentProvider助跨应用数据共享

安卓文件存储

内部存储(Internal Storage)

  • 路径/data/data/<包名>/files/
  • 特点
    • 默认私有,其他应用不可访问
    • 无需申请存储权限(Android 10+ 需注意分区存储限制)
    • 适合存储敏感配置、缓存文件等
  • API
    File internalFile = new File(context.getFilesDir(), "filename");

外部存储(External Storage)

  • 路径/storage/emulated/0/(Android 10+ 需适配沙盒机制)
  • 特点
    • 公有目录(如 Downloads)需申请 WRITE_EXTERNAL_STORAGE 权限
    • 可跨应用共享数据(如媒体文件)
    • 可能被用户或系统清理
  • API
    File externalFile = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "image.jpg");

SharedPreferences

  • 用途:存储键值对(如配置项)
  • 特点
    • 基于XML文件存储,自动序列化
    • 支持 MODE_PRIVATE(私有)或 MODE_MULTI_PROCESS(多进程共享)
  • API
    SharedPreferences prefs = context.getSharedPreferences("config", Context.MODE_PRIVATE);
    prefs.edit().putString("key", "value").apply();

安卓数据库存储

SQLite

  • 特点
    • 嵌入式关系型数据库,支持SQL语法
    • 单线程默认,需处理多线程并发问题
    • 适合结构化数据(如用户信息表)
  • API
    SQLiteDatabase db = SQLiteOpenHelper.getReadableDatabase();
    db.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");

Room(推荐)

  • 特点

    安卓中的文件数据库

    • SQLite 的抽象层,解决编译时验证问题
    • 支持LiveData和RxJava响应式编程
    • 自动生成 Dao 实现类
  • API

    @Entity
    public class User {
        @PrimaryKey public int id;
        public String name;
    }
    @Dao
    public interface UserDao {
        @Insert fun insert(user: User)
        @Query("SELECT  FROM User") fun getAllUsers(): List<User>
    }

Realm(第三方库)

  • 特点
    • 面向对象的数据库,支持跨平台同步
    • 高性能,适合频繁读写的场景(如实时聊天)
  • API
    Realm realm = Realm.getDefaultInstance();
    realm.executeTransaction(r -> r.insert(new ChatMessage()));

文件与数据库的核心对比

维度 文件存储 数据库存储
数据结构 扁平文件/键值对 表结构/对象关系
操作方式 文件流读写/SharedPreferences API SQL语句/ORM框架
性能 小文件高效,大文件较慢 复杂查询高效,事务支持
适用场景 配置文件、临时缓存、媒体文件 结构化数据、多表关联、高频读写
数据一致性 手动管理,易出错 事务保障,ACID特性

常见问题与解答

问题1:如何选择文件存储还是数据库?

解答

安卓中的文件数据库

  • 优先文件存储:配置项(SharedPreferences)、临时缓存、媒体文件(如图片/视频)。
  • 优先数据库:需要关联查询(如订单+用户信息)、高频读写(如日志记录)、复杂数据结构。

问题2:SQLite和Room的本质区别是什么?

解答

安卓中的文件数据库

  • SQLite:原生数据库,需手动管理版本升级、线程安全、数据迁移。
  • Room:SQLite的封装,提供编译时验证、抽象Dao接口、LiveData集成,降低开发复杂度