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这个类的时候,
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了。