0

Android アプリケーションで 5 ~ 6 個のテーブルを作成する必要があります。SQLite データベースと 5 ~ 6 個のテーブルを作成するのに最適な場所は? 最初のアクティビティの起動時にこれらすべてのロジックを (SQLite オープン ヘルパー メソッドを使用して) 記述できますが、そうすると、最初のアクティビティが起動するたびに呼び出されます。つまり、データベースとテーブルのこれらの作成ロジックは、アプリケーションが起動するたびに実行されます.これを行うためのベストプラクティスを誰かに教えてもらえますか.

4

4 に答える 4

1

SQLiteOpenHelper を拡張するクラスを作成し、onCreate メソッドでテーブルを作成する場合、一度だけ実行されます。デバイスからデータ/アプリケーションを完全に削除した場合にのみ、ヘルパーはデータを再作成します。

developer.android.comから:データベースが初めて作成されるときに呼び出されます。これは、テーブルの作成とテーブルの初期設定が行われる場所です。

もう少し情報を提供します。SQLiteOpenHelper を拡張するために使用するクラスのコンストラクターで、いくつかのパラメーターを受け入れるスーパー コンストラクターを呼び出します。それらの1つはデータベースのバージョンです。

スーパーコンストラクターに渡されたこの db_version が最後に渡されたものと異なる場合、onUpgrade メソッドが呼び出され、onUpgrade() メソッドで onCreate() を呼び出すことができます

それで:

  1. データ/アプリを削除する
  2. onCreate() を呼び出す onUpgrade が呼び出されるようにする

データベースを作成/更新/削除する方法です

于 2012-06-04T14:43:46.030 に答える
0

SQLiteOpenHelper を拡張する内部クラスを使用して、メソッド public void onCreate(SqLiteDatabase sqlLiteDatabase) および public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) をオーバーライドできます。

onCreate は、ディスクにデータベースが存在せず、ヘルパー クラスが新しいデータベースを作成する必要がある場合に呼び出されます。

onUpgrade は、db バージョンの不一致がある場合に呼び出されます。ディスク上の db のバージョンを newVersion にアップグレードする必要があります

private static final class PatientDatabaseHelper extends SQLiteOpenHelper {

    private static final String TAG = "PatientProvider";

    private static final String DATABASE_NAME = "myPatient.db";
    private static final int DATABASE_VERSION = 1;
    private static final String PATIENT_TABLE = "PATIENT";

    private static final String CREATE_TABLE_PATIENT =
            "create table " + PATIENT_TABLE + " ("
                    + PATIENT_KEY_ID + " integer primary key autoincrement, "
                    + PATIENT_NAME + " TEXT NOT NULL, "
                    + PATIENT_FIRST_NAME + " TEXT NOT NULL, "
                    + PATIENT_TEL + " TEXT, "
                    + PATIENT_GSM1 + " TEXT, "
                    + PATIENT_GSM2 + " TEXT, "
                    + PATIENT_BIRTHDATE + " DATE); ";



    public PatientDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_TABLE_PATIENT);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
       //simple case sample - droppin the table
       sqLiteDatabase.execSQL("DROP TABLE IF IT EXISTS " + PATIENT_TABLE);


      //Create a new One
      onCreate(sqLiteDatabase);

    }
}

Androidのターゲットバージョンに依存しますが、ContentProvider http://developer.android.com/guide/topics/providers/content-provider-creating.htmlで使用するのが良いアプローチだと思います

于 2012-06-04T15:17:15.140 に答える
0

メインアクティビティでデータベースとテーブルを作成できます

ただし、データベースを作成する前に確認できます

if(exits())
{
   // do not create
}
else
{
   // create here
}
于 2012-06-04T14:43:27.130 に答える
0

個人的には、オプション : を使用しますCREATE TABLE IF NOT EXISTS

したがって、オープンヘルパーには次のパラメーターがあります。

 private static final int VERSION_BDD = 1;

openHelper は、起動のたびに各テーブルを再作成しないと思います。

于 2012-06-04T14:43:47.560 に答える