0

複数のテーブルを持つデータベースがあります。これらのテーブルの1つ(スポーツ)には、オブジェクトの静的リストを配置する必要があります。各リストには、_id、name、logo、およびintが含まれています。_idは、他のテーブルがいくつかのクエリを実行するために使用するため(たとえば、sport_id = _idである「テーブルX」から選択)、時間の経過とともに変更されないようにする必要があります(この_idへのすべての参照を更新する方法はありますか?変化する?)。この行を1回だけ追加するように(そして行数が増えるかどうかを確認して新しい行を追加するために)コードをどこに配置すればよいですか(db.insertSport()の単純なリストになると思います)?行は多くなく、せいぜい50です。

4

1 に答える 1

0

dbHelperにそのデータを挿入するメソッドを作成し、アプリの起動直後にそのメソッドを呼び出すと思います。私はここでいくつかの仮定をしています...最初に、この静的な情報をアプリで出荷し、さらに情報を追加したい場合は、新しいバージョンを出荷します。

データをテキストファイルとしてアセットフォルダーに保存してから、メソッドでバッチ挿入を実行してファイルを読み取ることができます。

正しく設定すると(メソッドinsertWithOnConflictのフラグを使用してCONFLICT_IGNORE)、毎回新しい行(存在する場合)のみが追加されるため、アプリが起動するたびに実行でき、データの重複や制約違反によるクラッシュについて心配する必要はありません。

追加情報があるときに一度だけ実行したい場合は、テキストファイルにバージョン番号を入力し、前のバージョン番号(SharedPreferencesに保存できます)と照合します。

編集

insertWithOnConflictの使用例:

public long createItem(String yourdata) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(YOUR_COLUMN, yourdata);
    return mDb.insertWithOnConflict(YOUR_TABLE, null, initialValues,
            SQLiteDatabase.CONFLICT_IGNORE);
}

ここでSQLiteDatabaseクラス(定数とメソッドを含む)を読むことができます

于 2012-05-23T15:20:22.430 に答える