@Override
public void onCreate(SQLiteDatabase db) {
// Create tables
db.execSQL(CREATE_CATEGORIES_TABLE);
db.execSQL(CREATE_CHRGDATA_TABLE);
db.execSQL(CREATE_SETTINGS_TABLE);
setDefaultLabel();
}
/**
*
*/
public void setDefaultLabel() {
// create default label
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, "Default");
db.insert(TABLE_LABELS, null, values);
}
代码中onCreate方法中的setDefaultLabel()方法里再次调用了SQLiteDataabase造成,数据库递归调用,此时的解决办法为:修改setDefaultLabel()方法
@Override
public void onCreate(SQLiteDatabase db) {
// Create tables
db.execSQL(CREATE_CATEGORIES_TABLE);
db.execSQL(CREATE_CHRGDATA_TABLE);
db.execSQL(CREATE_SETTINGS_TABLE);
setDefaultLabel(db);
}
/**
*
*/
public void setDefaultLabel(SQLiteDatabase db) {
// create default label
ContentValues values = new ContentValues();
values.put(KEY_NAME, "Default");
db.insert(TABLE_LABELS, null, values);
}
此时,SQLiteDatabase引用之前参数中的,就避免了重复。
其他情况类似,请根据此方法为蓝本,进行改造即可。。。。