Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

主要介绍room的基础用法,使用room时数据库升级,重点是数据库加密。

Notifications You must be signed in to change notification settings

MrFishC/RoomSimple

Repository files navigation

前言

  • 主要介绍room的基础用法,使用room时数据库升级,重点是数据库加密。

依赖

基础使用

  • 定义entity
  • 定义dao
  • 自定义RoomDatabase实现类

版本升级

  • 场景

    • 数据库未加密的情况下,新增其它字段
      • 升级数据库步骤 :
        • 修改entity
        • 创建Migration迁移类
        • 修改数据库版本
  • 遇到的问题

 java.lang.IllegalStateException: Migration didn't properly handle: SimpleInfo(cn.xxx.roomsimple.SimpleInfo).Expected:
 已存在的数据库表跟现在的数据库表不同抛出了此问题
  • 未正确的按照升级数据库的步骤进行

数据库加密

  • 基于android-database-sqlcipher封装的开源库cwac-saferoom

  • android-database-sqlcipher:对数据库整个文件进行加密,打开的时候需要输入密码。

  • 结合room的使用

    • 使用openHelperFactory方法,配置factory(不推荐)
  • 直接调用加密api(推荐方式)

  • 具体使用

    • 不使用Room.databaseBuilder的openHelperFactory方法配置factory
      • 初始化时加密数据库,需要时解密数据库,方案可行;
    • 使用Room.databaseBuilder的openHelperFactory方法配置factory,然后再尝试解密数据库(或初始化时先调用数据库加密,然后再尝试解密数据库)
      • 出现持续性需要输入密码
      • 避免使用该方案
    • 只使用Room.databaseBuilder的openHelperFactory方法配置factory,不调用解密的方法
      • 弊端:查看数据库需要输入密码,即不能解密数据库
      • 不太建议使用该方案
  • 修改密码

    • 建议方案:先解密,再加密。

报错

 android.database.sqlite.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master;
 at net.sqlcipher.database.SQLiteCompiledSql.native_compile(Native Method)
  • 原因(可能是之一):在初始化数据库时未对数据库进行加密,但是在其它地方使用时对数据库进行了加密。

注意

  • 在使用模拟器时,未打开root权限,是不可以导出数据库的。在导出文件时,db-shm和db-wal都需要导出来(使用DB Browser for SQLCipher工具查看);

参考资料

About

主要介绍room的基础用法,使用room时数据库升级,重点是数据库加密。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /