作者:追麾 | 来源:互联网 | 2023-01-29 14:25
即使在卸载应用程序然后重新安装它之后,也不会调用onCreate方法.
Database.java:
public class Database extends SQLiteOpenHelper {
public static SQLiteDatabase db;
public Database(Context context) {
super(context,"db", null, 1);
Log.i("DB", "dbManager");
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("DB", "dbOnCreate");
String s = "CREATE TABLE test(id INTEGER);";
db.execSQL(s);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
Log.i("DB", "dbOnUpgrade");
}
}
我这叫:
Database db = new Database(this);
输出:
07-17 12:42:03.053 16448-16448/com.package.app I/DB:dbManager
这个问题是什么以及如何解决?
1> Willi Mentze..:
public class Database extends SQLiteOpenHelper {
public static SQLiteDatabase db;
public Database(Context context) {
super(context,"db", null, 1);
getReadableDatabase(); // <-- add this, which triggers onCreate/onUpdate
Log.i("DB", "dbManager");
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("DB", "dbOnCreate");
// ...
}
// ...
}
说明:
仅在访问db进行写入或读取时才会触发更新.既然你没有尝试过,onCreate
就永远不会被召唤.
通常,您只需在某处调用Database类的方法(例如查询实体),这就是调用onCreate
/(或onUpdate
)的时刻.
既然,你没有这样的方法(现在),只需在Database构造函数中调用它.
要么:
或者,也许更干净的是getReadableDatabase()
在创建Database对象后立即调用:
Database db = new Database(this);
db.getReadableDatabase();