私はSQLIteOpenHelperを拡張し、テーブルの作成とアップグレードのようなものの世話をするアイテムをデータベースに事前ロードするより良い方法はありますか?私のAndroidアプリで
SQLiteHelperクラスを持っています。
SQLiteDatasource SQLiteHelperオブジェクトに対してCRUD操作を実行するクラス。
テーブルの1つに特定のアイテムをあらかじめロードしておきたいので、ユーザーが最初にアプリケーションを使用するときに何かが存在します。これらのアイテムは変更される可能性がありますので、私はそれらをモジュール化したいと考えています。
今、私はそれをこのようにやっている:
public class MyDefaults {
public static final ArrayList<HashMap<String, String>> MY_DEFAULTS;
static {
MY_DEFAULTS = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
//All the values below you change to whatever defaults you want
map.clear();
map.put(SQLiteHelper.KEY_1, "Value 1A");
map.put(SQLiteHelper.KEY_2, "Value 2A");
map.put(SQLiteHelper.KEY_3, "Value 3A");
MY_DEFAULTS.add(new HashMap<String, String>(map));
map.clear();
map.put(SQLiteHelper.KEY_1, "Value 1B");
map.put(SQLiteHelper.KEY_2, "Value 2B");
map.put(SQLiteHelper.KEY_3, "Value 3B");
MY_DEFAULTS.add(new HashMap<String, String>(map));
map.clear();
map.put(SQLiteHelper.KEY_1, "Value 1C");
map.put(SQLiteHelper.KEY_2, "Value 2C");
map.put(SQLiteHelper.KEY_3, "Value 3C");
MY_DEFAULTS.add(new HashMap<String, String>(map));
//and so on
}
}
そして、私のSQLiteDatasourceクラスで私は、これらのデフォルト値の挿入を実行する方法があります:
public void preloadDefaults() {
mDatabase.beginTransaction();
try {
for (HashMap<String, String> map : MyDefaults.MY_DEFAULTS) {
ContentValues values = new ContentValues();
values.put(SQLiteHelper.KEY_1, map.get(SQLiteHelper.KEY_1));
values.put(SQLiteHelper.KEY_2, map.get(SQLiteHelper.KEY_2));
values.put(SQLiteHelper.KEY_3, map.get(SQLiteHelper.KEY_3));
mDatabase.insert(SQLiteHelper.SOME_TABLE, null, values);
}
}
finally {
mDatabase.endTransaction();
}
}
はの私の方法ですこれは悪い習慣とみなされますか?作成された後にテーブルに挿入される「デフォルト」を定義する良い方法はありますか?静的クラスの代わりにXMLを使用している可能性はありますか?
注:実際に実行時に作成された他の値とともにこれらのフィールドを挿入しているため、外部DBをコピーすることはできません(上のコードは実際のコードの単純化です)。
私はおそらくCSVファイルに行きます。入力を可能な限り記憶域のように見せます。 –
@CoreyOgburnこれは本当に興味深い考えです。しかし、私はオートコンプリートにCSVリーダーを見ることはできません。お勧めの方法はありますか? –
私は自分のプロジェクトの一つでこれを行うかもしれないので、私も探し始めました。 [OpenCSV](http://opencsv.sourceforge.net/)は常に推奨されていますが、私はそれについての経験はまだありません。 –