SQLiteOpenHelperクラスのonCreateメソッドがいつ実行されるか--databaseのみ.dbが存在しない場合

3803 ワード

Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public   class   MyHelper  extends   SQLiteOpenHelper {              public   static   final   String DB_NAME =  "schedule.db" ;      public   static   final   int   VERSION =  1 ;             public   static   final   String DATABASE_CREATE =  " " ;             public   MyHelper(Context context) {          super (context, DB_NAME,  null , VERSION);      }
       @Override      public   void   onCreate(SQLiteDatabase db) {          db.execSQL(DATABASE_CREATE);      }
       @Override      public   void   onUpgrade(SQLiteDatabase db,  int   oldVersion,  int   newVersion) {          db.execSQL( "drop table if exists "   + TABLE_NAME);          onCreate(db);      } }
例えば、上記のようにMyHelperクラスを定義してSQLiteOpenHelperを継承すると、私が他の場所でMyHelperというクラスを使ったとき、
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public   class   DbAdapter {             private   final   Context mCtx;             private   MyHelper helper;      private   SQLiteDatabase db;             public   DbAdapter(Context ctx) {          this .mCtx = ctx;      }             public   DbAdapter open()  throws   SQLException {          helper =  new   MyHelper(mCtx);          db = helper.getWritableDatabase();          return   this ;      }             public   void   close() {          helper.close();      }
MyHelperというクラスのonCreateメソッドはいつ実行されますか??
MyHelperオブジェクトを作成するときに実行しますか?
それともgetWritableDatabase()メソッドを呼び出して実行しますか?それとも他のいつ実行しますか?
私は今プログラムの中でonCreateの方法は実行しません(私はonCreateの方法の中でLog.d()の方法を追加して试みましたが、LogCatの中で私のデバッグの情报を出力していないで、実行していないことを说明します).
理由:getReadableDatabaseまたはgetWritableDatabaseを調整すると、指定するデータベースが存在するかどうかを判断し、存在しない場合はSQLiteDatabaseを調整する.create作成、onCreateデータベースの最初の作成時にのみ実行
一度実行するとscheduleがあるからですdbというデータベースファイルなので、後でonCreateというメソッドを呼び出すことはありません.FileExploerのデータベースファイルを削除すればOKです.