全部产品
云市场

数据库存储

更新时间:2019-09-09 15:08:04

mPaaS 提供的数据库存储基于 OrmLite 架构,提供了数据库底层加密能力。数据库的增、删、改、查可以使用 com.j256.ormlite.dao.Dao 的接口来调用。

重要 在使用数据库时,请不要对原有数据库直接进行加密,否则会引发 native 层解密崩溃。建议您先创建新的加密数据库,再将原有数据库内容拷贝至新建的加密数据库中。

使用示例

生成数据表

  1. // 数据库表名,默认为类名
  2. @DatabaseTable
  3. public class User {
  4. // 主键
  5. @DatabaseField(generatedId = true)
  6. public int id;
  7. // name字段唯一
  8. @DatabaseField(unique = true)
  9. public String name;
  10. @DatabaseField
  11. public int color;
  12. @DatabaseField
  13. public long timestamp;
  14. }

创建 OrmLiteSqliteOpenHelper

自定义一个 DemoOrmLiteSqliteOpenHelper 继承自 OrmLiteSqliteOpenHelper
通过 OrmLiteSqliteOpenHelper,可以创建数据库并对数据库加密。

  1. public class DemoOrmLiteSqliteOpenHelper extends OrmLiteSqliteOpenHelper {
  2. /**
  3. * 数据库名称
  4. */
  5. private static final String DB_NAME = "com_mpaas_demo_storage.db";
  6. /**
  7. * 当前数据库版本
  8. */
  9. private static final int DB_VERSION = 1;
  10. /**
  11. * 数据库加密秘钥,mPaaS 支持数据库加密,使数据在设备上更安全,若为 null 则不加密。
  12. * 注意:密码只能设置一次,不提供修改密码的 API;不支持对未加密的库设置密码进行加密(会导致闪退)。
  13. */
  14. private static final String DB_PASSWORD = "mpaas";
  15. public DemoOrmLiteSqliteOpenHelper(Context context) {
  16. super(context, DB_NAME, null, DB_VERSION);
  17. setPassword(DB_PASSWORD);
  18. }
  19. /**
  20. * 数据库创建时的回调函数
  21. *
  22. * @param sqLiteDatabase 数据库
  23. * @param connectionSource 连接
  24. */
  25. @Override
  26. public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
  27. try {
  28. // 创建User表
  29. TableUtils.createTableIfNotExists(connectionSource, User.class);
  30. } catch (SQLException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. /**
  35. * 数据库更新时的回调函数
  36. *
  37. * @param database 数据库
  38. * @param connectionSource 连接
  39. * @param oldVersion 旧数据库版本
  40. * @param newVersion 新数据库版本
  41. */
  42. @Override
  43. public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
  44. try {
  45. // 删除旧版User表,忽略错误
  46. TableUtils.dropTable(connectionSource, User.class, true);
  47. } catch (SQLException e) {
  48. e.printStackTrace();
  49. }
  50. try {
  51. // 从新创建User表
  52. TableUtils.createTableIfNotExists(connectionSource, User.class);
  53. } catch (SQLException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. }

查询数据

这里是查询User表的全部数据并按照timestamp字段进行升序排列

  1. /**
  2. * 初始化DB数据
  3. */
  4. private void initData() {
  5. mData.clear();
  6. try {
  7. mData.addAll(mDbHelper.getDao(User.class).queryBuilder().orderBy("timestamp", true).query());
  8. } catch (SQLException e) {
  9. e.printStackTrace();
  10. }
  11. }

插入数据

  1. /**
  2. * 插入用户信息
  3. *
  4. * @param user 用户信息
  5. */
  6. private void insertUser(User user) {
  7. if (null == user) {
  8. return;
  9. }
  10. try {
  11. // mDbHelper = new DemoOrmLiteSqliteOpenHelper(this); 更多信息,请参见上文 创建 OrmLiteSqliteOpenHelper
  12. mDbHelper.getDao(User.class).create(user);
  13. } catch (SQLException e) {
  14. e.printStackTrace();
  15. }
  16. }

删除数据

  1. /**
  2. * 删除用户信息
  3. *
  4. * @param user 用户信息
  5. */
  6. private void deleteUser(User user) {
  7. try {
  8. // mDbHelper = new DemoOrmLiteSqliteOpenHelper(this); 更多信息,请参见上文 创建 OrmLiteSqliteOpenHelper
  9. mDbHelper.getDao(User.class).delete(user);
  10. } catch (SQLException e) {
  11. e.printStackTrace();
  12. }
  13. }

相关链接

OrmLite 介绍