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
例えば、上記のように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
MyHelperというクラスのonCreateメソッドはいつ実行されますか??
MyHelperオブジェクトを作成するときに実行しますか?
それともgetWritableDatabase()メソッドを呼び出して実行しますか?それとも他のいつ実行しますか?
私は今プログラムの中でonCreateの方法は実行しません(私はonCreateの方法の中でLog.d()の方法を追加して试みましたが、LogCatの中で私のデバッグの情报を出力していないで、実行していないことを说明します).
理由:getReadableDatabaseまたはgetWritableDatabaseを調整すると、指定するデータベースが存在するかどうかを判断し、存在しない場合はSQLiteDatabaseを調整する.create作成、onCreateデータベースの最初の作成時にのみ実行
一度実行するとscheduleがあるからですdbというデータベースファイルなので、後でonCreateというメソッドを呼び出すことはありません.FileExploerのデータベースファイルを削除すればOKです.
?
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です.