全部產品
Search
文件中心

Mobile Platform as a Service:資料庫儲存

更新時間:Jul 13, 2024

mPaaS 提供的資料庫儲存基於 OrmLite 架構,提供了資料庫底層加密能力。資料庫的增、刪、改、查可以使用以下介面來調用:

  • 10.2.3 及以上基準:com.alibaba.j256.ormlite.dao.Dao

  • 10.1.68 及以下基準:com.j256.ormlite.dao.Dao

說明

在使用資料庫時,請不要對原有資料庫直接進行加密,否則會引發 native 層解密崩潰。建議您先建立新的加密資料庫,再將原有資料庫內容拷貝至建立的加密資料庫中。

使用樣本

產生資料表

// 資料庫表名,預設為類名
@DatabaseTable
public class User {
    // 主鍵
    @DatabaseField(generatedId = true)
    public int id;
    // name 欄位唯一
    @DatabaseField(unique = true)
    public String name;
    @DatabaseField
    public int color;
    @DatabaseField
    public long timestamp;
}

建立 OrmLiteSqliteOpenHelper

自訂一個 DemoOrmLiteSqliteOpenHelper 繼承自 OrmLiteSqliteOpenHelper。通過OrmLiteSqliteOpenHelper,可以建立資料庫並對資料庫加密。

  • 10.2.3 及以上基準:

    public class DemoOrmLiteSqliteOpenHelper extends OrmLiteSqliteOpenHelper {
    
        /**
         * 資料庫名稱
         */
        private static final String DB_NAME = "com_mpaas_demo_storage.db";
    
        /**
         * 當前資料庫版本
         */
        private static final int DB_VERSION = 1;
    
        /**
         * 資料庫加密金鑰,mPaaS 支援資料庫加密,使資料在裝置上更安全,若為 null 則不加密。
         * 注意:密碼只能設定一次,不提供修改密碼的 API;不支援對未加密的庫設定密碼進行加密(會導致閃退)。
         */
        private static final String DB_PASSWORD = "mpaas";
    
        public DemoOrmLiteSqliteOpenHelper(Context context) {
            super(context, DB_NAME, null, DB_VERSION);
            setPassword(DB_PASSWORD);
        }
    
        /**
         * 資料庫建立時的回呼函數
         *
         * @param sqLiteDatabase   資料庫
         * @param connectionSource 串連
         */
        @Override
        public void onCreate(MPSQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
            try {
                // 建立 User 表
                TableUtils.createTableIfNotExists(connectionSource, User.class);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 資料庫更新時的回呼函數
         *
         * @param database         資料庫
         * @param connectionSource 串連
         * @param oldVersion       舊資料庫版本
         * @param newVersion       新資料庫版本
         */
        @Override
        public void onUpgrade(MPSQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
            try {
                // 刪除舊版 User 表,忽略錯誤
                TableUtils.dropTable(connectionSource, User.class, true);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                // 從新建立 User 表
                TableUtils.createTableIfNotExists(connectionSource, User.class);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
  • 10.1.68 及以下基準:

    public class DemoOrmLiteSqliteOpenHelper extends OrmLiteSqliteOpenHelper {
    
        /**
         * 資料庫名稱
         */
        private static final String DB_NAME = "com_mpaas_demo_storage.db";
    
        /**
         * 當前資料庫版本
         */
        private static final int DB_VERSION = 1;
    
        /**
         * 資料庫加密金鑰,mPaaS 支援資料庫加密,使資料在裝置上更安全,若為 null 則不加密。
         * 注意:密碼只能設定一次,不提供修改密碼的 API;不支援對未加密的庫設定密碼進行加密(會導致閃退)。
         */
        private static final String DB_PASSWORD = "mpaas";
    
        public DemoOrmLiteSqliteOpenHelper(Context context) {
            super(context, DB_NAME, null, DB_VERSION);
            setPassword(DB_PASSWORD);
        }
    
        /**
         * 資料庫建立時的回呼函數
         *
         * @param sqLiteDatabase   資料庫
         * @param connectionSource 串連
         */
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
            try {
                // 建立 User 表
                TableUtils.createTableIfNotExists(connectionSource, User.class);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 資料庫更新時的回呼函數
         *
         * @param database         資料庫
         * @param connectionSource 串連
         * @param oldVersion       舊資料庫版本
         * @param newVersion       新資料庫版本
         */
        @Override
        public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
            try {
                // 刪除舊版 User 表,忽略錯誤
                TableUtils.dropTable(connectionSource, User.class, true);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                // 從新建立 User 表
                TableUtils.createTableIfNotExists(connectionSource, User.class);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

查詢資料

這裡是查詢 User 表的全部資料並按照 timestamp 欄位進行升序排列。

    /**
     * 初始化 DB 資料
     */
    private void initData() {
        mData.clear();
        try {
            mData.addAll(mDbHelper.getDao(User.class).queryBuilder().orderBy("timestamp", true).query());
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

插入資料

    /**
     * 插入使用者資訊
     *
     * @param user 使用者資訊
     */
    private void insertUser(User user) {
        if (null == user) {
            return;
        }
        try {
            // mDbHelper = new DemoOrmLiteSqliteOpenHelper(this); 更多資訊,請參見上文建立 OrmLiteSqliteOpenHelper
            mDbHelper.getDao(User.class).create(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

刪除資料

    /**
     * 刪除使用者資訊
     *
     * @param user 使用者資訊
     */
    private void deleteUser(User user) {
        try {
            // mDbHelper = new DemoOrmLiteSqliteOpenHelper(this); 更多資訊,請參見上文建立 OrmLiteSqliteOpenHelper
            mDbHelper.getDao(User.class).delete(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }