private DatabaseHelper mDbHelper;
private class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db){
Log.d("june" , "DATABASE_CREATE : ");
db.execSQL(DATABASE_CREATE);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
db.execSQL("DROP TABLE IF EXISTS data");
onCreate(db);
}
}
@Override
public boolean onCreate() {
// contentprovider 시작할때 databasehelper를 생성한다.
mDbHelper = new DatabaseHelper(getContext());
return true;
}
contentprovider 를 extends 해서
프로바이더를 하나 만들었는데요
초기 컨텐츠 프로바이더를 불러오면
onCreate() // contentprovider 시작할때 databasehelper를 생성한다.
바로 이부분을 타거든요..
근데 db가 안만들어져서 insert하면 no such table의 에러가 납니다.
그래서 oncreate에다가 mdbhelper oncreate를 넣어주어서 만들었습니다.
그러니깐 잘 들어가지더라구요.. 그래서 궁금해서
이번에는 다시 mdbhelper oncreate를 다시 빼고
위에 소스 그대로 다시 원상복귀하고 엡지우고 데이터도 지워서 완전히 클리어한상태에서
다시 에러났던 소스로 원복해서
초기 컨텐츠 프로바이더를 불러오면
onCreate() // contentprovider 시작할때 databasehelper를 생성한다. 요부분
no such table이 안나오고 잘 됩니다..
한마디로 궁금한게 초기에
강제적으로 contentprovider의 oncrate에서 databasehelper.oncreate 를 해줘야하나요?
아니면
contentprovider의 oncreate 처럼 그냥
위에소스처럼 DatabaseHelper 의 생성자만 설정해주면
db의 table이 만들어지는 건가요?? 감이 잘 안잡힙니다.. ㅠㅠ





Helper의 생성자가 호출될 때, Helper의 내부 onCreate가 불리웁니다. --> 이때 DB가 생성되죠
보통은 ContentProvider 내부에 getDatabase / getReadableDatabase 등으 스태틱 메소드를 두고,
그 메소드 안에서 Helper를 생성자를 호출합니다.
즉, ContentProvider를 사용해서 DB에 접근하려는 첫 번째 시도에서 DB가 생성되는 것입니다.