mPaaS が提供するデータベースストレージは、OrmLite アーキテクチャに基づいてデータベースのアンダーレイヤーを暗号化する機能を提供します。次のインターフェイスを呼び出して、データベースでデータの追加、削除、変更、およびクエリを実行できます。
10.2.3 以降のベースライン:
com.alibaba.j256.ormlite.dao.Dao10.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();
}
}