SQLiteOpenHelperでクラスを拡張しようとしていますが、次のエラーが表示されます:「Android.database.sqlite.SQLitepenhelperで使用できるデフォルトのコンストラクターがありません」と他の「シンボルカテゴリ、メモ、...を解決できません」
class DbHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(Category.getSql());
db.execSQL(Note.getSql());
db.execSQL(Attachment.getSql());
db.execSQL(CheckItem.getSql());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + Category.TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + Note.TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + Attachment.TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + CheckItem.TABLE_NAME);
onCreate(db);
}
super
で4引数または5引数のSQLiteOpenHelper
コンストラクターを呼び出す明示的なコンストラクターを自分で定義する必要があります。
例えば:
public DbHelper(Context context) {
super(context, "database.db", null, 1);
}
どこ database.db
はデータベースファイル名であり、1
はバージョンです。
あなたのDBHelper
の子供なら、この投稿は助けになりますが、それ以外の場合は、すでに理解できます。最初にクラスの外でこのように定義してください。
private DBHelper ourHelper;
private final Context ourContext;
次にこれを使用します
class DbHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VIRSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(Category.getSql());
db.execSQL(Note.getSql());
db.execSQL(Attachment.getSql());
db.execSQL(CheckItem.getSql());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + Category.TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + Note.TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + Attachment.TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + CheckItem.TABLE_NAME);
onCreate(db);
}
そして、親クラスに対してこのコンテキストを試してください
public MyDatabase(Context c){
ourContext=c;
}