すべてのプロダクト
Search
ドキュメントセンター

Mobile Platform as a Service:データベースストレージ

最終更新日:Jan 17, 2025

mPaaS が提供するデータベースストレージは、OrmLite アーキテクチャに基づいてデータベースのアンダーレイヤーを暗号化する機能を提供します。次のインターフェイスを呼び出して、データベースでデータの追加、削除、変更、およびクエリを実行できます。

  • 10.2.3 以降のベースライン: com.alibaba.j256.ormlite.dao.Dao

  • 10.1.68 以前のベースライン: com.j256.ormlite.dao.Dao

説明

データベースを使用する場合は、元のデータベースを直接暗号化しないでください。ネイティブ レイヤーの復号クラッシュが発生する可能性があります。最初に新しい暗号化データベースを作成し、元のデータベースの内容を新しく作成した暗号化データベースにコピーすることをお勧めします。

テーブルの生成

// データベース テーブル名。デフォルトではクラス名です
@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 の作成

OrmLiteSqliteOpenHelper を継承する DemoOrmLiteSqliteOpenHelper をカスタマイズします。

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(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();
        }
    }
}
  • 10.1.68 以前のベースライン:

データベース暗号化キー。 mPaaS はデータベースの暗号化をサポートしており、デバイス上のデータの安全性を高めます。 null の場合、データベースは暗号化されません。データベース暗号化キー。 mPaaS はデータベースの暗号化をサポートしており、デバイス上のデータの安全性を高めます。 null の場合、データベースは暗号化されません。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 フィールドで昇順にソートするとします。

    /**
     * データベース データを初期化する
     */
    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 はカスタマイズした DemoOrmLiteSqliteOpenHelper です
            mDbHelper.getDao(User.class).create(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

データの削除

    /**
     * ユーザー情報を削除する
     *
     * @param user ユーザー情報
     */
    private void deleteUser(User user) {
        try {
            // データを削除します。 mDbHelper はカスタマイズした DemoOrmLiteSqliteOpenHelper です
            mDbHelper.getDao(User.class).delete(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

OrmLite の概要