SQLiteOpenHelper“的onCreate”不叫? (数据库不存在)(SQLiteOp

2019-06-23 14:56发布

从片段我实例化这种方式

fmdata = new FileManagerData(getActivity());

下面的类。 我不明白为什么的onCreate()不叫我的数据库还没有生成。

public class FileManagerData {
public static final String TAG = FileManagerData.class.getSimpleName();;


Context context;
DBHelper dbHelper;

public FileManagerData (Context context){
    this.context = context;
    dbHelper = new DBHelper();
}

private class DBHelper extends SQLiteOpenHelper{

    private static final String DB_NAME = "filename.db";
    private static final String DB_SQL = "filename.sql";
    private static final int DB_VERSION = 1; // internal number

    public DBHelper() {
        super(context, DB_NAME, null, DB_VERSION);  
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
            // this is NEVER called and my DB does not exist yet
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }   
}

编辑 :诀窍是,数据库必须使用(读或写),这样的onCreate()被调用。

Answer 1:

onCreate 方法后首次访问DB调用 。 做一个查询到数据库和onCreate将被调用。



Answer 2:

也许数据库从较早的尝试存在。

卸载你的应用程序,然后再试一次。



Answer 3:

你应该把在此的onCreate:

sqLiteDatabase.execSQL("create table" + DB_NAME + " ( _id integer primary key autoincrement, " + fieldOne + "INTEGER, " + fieldTwo + "INTEGER);");

凡fieldOne和fieldTwo是你的表的列名。 另外,也要看看这里: http://www.sqlite.org/datatype3.html



Answer 4:

我知道这个线程已经接受的答案。 Neverthless这就是我来补充:

我有:

    protected class OpenHelper extends SQLiteOpenHelper {

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
             MHSqlDb.this.createTables(db);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我打电话这样的:

    iOpenHelper = new OpenHelper(iDbFileName, DATABASE_VERSION );

该databese文件不在这个阶段存在。

那时我的应用程序的一些调试。 我从来没有打电话

    iOpenHelper.getReadableDatabase();

无论是我打电话

    iOpenHelper.getWritableDatabase();

数据库文件仍然不存在。 现在,当我从调试器终止该应用,我可以突然看到数据库文件(在iDbFileName名称)创建。 该OpenHelper的OnCreate方法不会被调用。

所以,虽然我同意,onCreate方法的意图似乎是被调用时,数据库文件不存在,要么getReadableDatabase()或getWritableDatabase()被调用,这显然并非总是如此。



Answer 5:

卸载应用程序会删除数据库,从而将调用的onCreate上一次运行。



文章来源: SQLiteOpenHelper “onCreate” is not called? (the DB does not exist)