0

私が知っているように、私はアンドロイドでSQLiteデータベースを学んでいます、私たちは通常以下のパターンを使用します(コードスニペットを参照)、私の理解は

  1. NoteDbHelpeobj がインスタンス化されると、コンストラクターが呼び出され、対応するデータベースが作成されているかどうかがチェックされます。
  2. そうでない場合は、データベースを作成し、 を呼び出してonCreateテーブルを作成します。
  3. アップグレードする必要がある場合は、データベースをアップグレードする必要があるかどうかを確認します。アップグレードする必要がある場合は、onUpgrade.

私の主な関心事は、データベースがいつ作成されるかです。コンストラクターで処理する必要があると思いますが、私の理解は正しいですか?

    public class NoteDbHelper extends SQLiteOpenHelper{

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "notes_db";

    public NoteDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

     public void onCreate(SQLiteDatabase db) {
         String createNoteTableSql = "CREATE TABLE ...";
         db.execSQL(createNoteTableSql);
     }

    @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
         db.execSQL("DROP TABLE IF EXISTS " + NOTE_TABLE_NAME);

        // Create tables again
        onCreate(db);
    }
4

2 に答える 2

3

いいえ、ヘルパーの構築時にデータベースは作成されません。代わりに、最初に使用するときに開かれます (必要に応じて作成されます)。ドキュメントはこれについて非常に明確です:

public SQLiteDatabase getWritableDatabase ()

読み取りと書き込みに使用されるデータベースを作成および/または開きます。これが初めて呼び出されると、データベースが開かれ、onCreate(SQLiteDatabase)onUpgrade(SQLiteDatabase, int, int) and/oronOpen(SQLiteDatabase)が呼び出されます。

この理由は、クラスの概要にあります。

ContentProviderこのクラスを使用すると、実装でデータベースのオープンとアップグレードを最初に使用するまで遅らせることが容易になり、実行時間の長いデータベース アップグレードでアプリケーションの起動がブロックされるのを回避できます。

于 2013-08-15T09:35:56.920 に答える
2

ソースを見るだけ

onCreateは から呼び出され、getDatabaseLockedは と から呼び出されgetWritableDatabaseますgetReadableDatabase

于 2013-08-15T09:34:14.673 に答える