即使在卸载应用程序然后重新安装它之后,也不会调用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
这个问题是什么以及如何解决?
答案 0 :(得分:7)
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 db = new Database(this);
db.getReadableDatabase();
答案 1 :(得分:1)
@Override
public void onCreate(SQLiteDatabase db) {
// ...
}
onCreate 首次创建数据库时调用。这是哪里 表的创建和表的初始填充应该 发生。
尝试
String s = "CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY);";
卸载应用并再次运行。然后检查
答案 2 :(得分:0)
您必须为Database类调用getReadableDatabase()或getWritableDatabase()方法。
如果要将数据写入/更新到数据库,请使用getWritableDatabase()
,如果要从数据库中获取数据,请使用getReadableDatabase()
Database dbHelper = new Database(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
SQLiteDatabase db = dbHelper.getWritableDatabase();
然后使用适当的方法在数据库中进行扭曲,获取,更新或删除数据。
例如:
db.query("table_name", null, null, null, null, null, null);