不调用SQLiteOpenHelper onCreate方法

时间:2017-07-17 08:21:39

标签: android sqlite 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");
    }
}

我称之为:

Database db = new Database(this);

输出:

  

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

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

3 个答案:

答案 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);