不调用SQLiteOpenHelper onCreate方法

Moh*_*ori 2 sqlite android android-sqlite

即使在卸载应用程序然后重新安装它之后,也不会调用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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我这叫:

Database db = new Database(this);
Run Code Online (Sandbox Code Playgroud)

输出:

07-17 12:42:03.053 16448-16448/com.package.app I/DB:dbManager

这个问题是什么以及如何解决?

Wil*_*zel 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");
        // ...
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

说明: 仅在访问db进行写入或读取时才会触发更新.既然你没有尝试过,onCreate就永远不会被召唤.

通常,您只需在某处调用Database类的方法(例如查询实体),这就是调用onCreate/(或onUpdate)的时刻.

既然,你没有这样的方法(现在),只需在Database构造函数中调用它.

要么:

或者,也许更干净的是getReadableDatabase()在创建Database对象后立即调用:

Database db = new Database(this);
db.getReadableDatabase();
Run Code Online (Sandbox Code Playgroud)