我试图更好地理解 SQLiteOpenHelper 类以及 onCreate 和 onUpgrade 的调用方式和时间。
我的问题是,每次我退出并启动我的应用程序(从技术上讲,实际上是每次我创建 MyDB 的新实例时),都会调用 onCreate ,并且之前使用的所有数据都会被有效擦除...... WTF ???
我最初通过创建一个单例 MyDBFactory 来解决这个问题,在其中创建了 MyDB 的单个实例。这使得数据至少在应用程序运行时保持不变。
我希望我的数据库模式和数据能够持久!
我基本上有:
public class MyDB extends SQLiteOpenHelper{
private static int VERSION = 1;
...
public ContactControlDB(Context context) {
super(context, null, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(DATABASE_CREATE);
db.execSQL(INSERT_DATA);
} catch (SQLException ex) {
ex.printStackTrace();
}
}
and:
public class MyDBFactory{
private static MyDB db;
public static MyDB getInstance(Context context) {
if(db == null) {
db = new MyDB (context);
}
return db;
}
}
我想知道的是为什么每次我有“new MyDB(context)”时都会调用 onCreate,以及每次我的应用程序退出时我的数据库会去哪里。
如果您有一些适当的链接或一些可以帮助我了解的知识,我将不胜感激!
该行:
super(context, null, null, VERSION);
第二个参数是null
指定应在内存中创建数据库,您应该给它一个名称。
安卓参考 http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#SQLiteOpenHelper%28android.content.Context,%20java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory,%20int%29
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)