应用程序崩溃后数据库加载为空

时间:2015-05-06 10:21:12

标签: android sqlite sqliteopenhelper

我的SQLite数据库遇到了一个奇怪的问题。当我第一次启动应用程序时实例化OpenHelper时,我的数据库正常加载,我可以检索所有数据。如果应用程序崩溃,android管理器会在我的第一个活动上重新弹出我的应用程序。因此,所有初始化过程都是相同的,但由于某些原因,数据库加载时没有任何数据。

这是我的OpenHelper构造函数:

   public static AppDatabaseHelper getInstance(Context ctx, Handler uiHandler, String companyName){
    if(mInstanceWithHandler==null){
        DATABASENAME=companyName;
        mInstanceWithHandler=new AppDatabaseHelper(ctx);
    }
    return mInstanceWithHandler;
    }

    private AppDatabaseHelper(Context context) {
    super(context, DATABASENAME, null, DATABASE_VERSION);
    this.context = context;
    }

我的datasource

 public AppDataSource(Context context, Handler handler, String companyName) {
    dbHelper = AppDatabaseHelper.getInstance(context, handler, companyName);
    database = dbHelper.getWritableDatabase(); 
    this.context = context;
}

我真的可以弄清楚为什么在应用程序崩溃后加载相同的数据库但没有任何数据。它是由系统层处理的吗?

编辑:onCreate / onUpgrade

@Override
public void onCreate(SQLiteDatabase db) {

    // build new tables
    db.execSQL(createSupplier(SUPPLIERS_TABLENAME));
    db.execSQL(createProduct(PRODUCTS_TABLENAME));
    db.execSQL(createUser(USERS_TABLENAME));
    ....
}
@Override
public void onUpgrade(final SQLiteDatabase db, int oldVersion,
        int newVersion) {

            // Create new tables with temp name
            db.execSQL(createSupplier(SUPPLIERS_TABLENAME + "_temp"));
            ....
            // insert data from old to new tables
            Cursor cursor = db.rawQuery(
                    "select tbl_name from sqlite_master ", null);
            List<String> tables = new ArrayList<String>();
            if (cursor.getCount() > 0)
                while (cursor.moveToNext())
            ....


            // rename new tables
            db.execSQL("alter table "
                    + AppDatabaseHelper.SUPPLIERS_TABLENAME + "_temp"
                    + " rename to " + SUPPLIERS_TABLENAME);
           ....

}

0 个答案:

没有答案