android onUpgrade,版本不升级

时间:2015-09-11 16:49:01

标签: android sqlite

我正在尝试升级我的数据库,一切都很好,但user_version不会升级,但每次启动应用程序。它会去onUpgrade并一次又一次地执行这个升级。

这里有一个类似的问题onUpgrade database Android version number not increasing,但他没有找到任何答案,所以我决定再次提问,如何增加和保存db版本?

我尝试使用setVersionPRAGMA,将其设置在onUpgrade()内部以及我能想象到的所有内容,但它不会自行增加,我的数据库是14MiB,所以我不能像在上面的问题中那样将TS再复制一次资产。

这是我的onUpgrade()代码,我在这里将先前数据库的数据导出到XML,删除表,创建新表并将数据从xml导入到新表中。

 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion == 1) {
            cImportExport cImpExp = new cImportExport(db, cbActivity.MY_FILES_DIR + File.separator + "export.xml", oldVersion);
            cImpExp.Export();

            db.execSQL("DROP TABLE IF EXISTS " + "1");
            db.execSQL("DROP TABLE IF EXISTS " + "2");

            onCreate(db);
            cImpExp.Import();
        }
    }

UPD

我发现,打开数据库并将其分配给变量后,版本成功递增:

  ps_dbHelper = new _DBHelper(this); 

        try {
            ps_db = ps_dbHelper.getWritableDatabase();
        } catch (SQLiteCantOpenDatabaseException ex) {
            alert(getString(R.string.db_not_found));
            onCreate(null);
        }

        int ver = ps_db.getVersion(); //IT'S = 2, AS IT SHOULD BE

唯一的问题是为什么数据库在关闭后不会保存?我试图明确地调用ps_dbps_dbHelper的.close方法来检查它,但是没关系,在我启动应用程序之后它会通过on {oldVersion = 1 ..

UPD 2

cImportExport初始化代码:

public class cImportExport {
      private String mXmlFilePath = cbActivity.MY_FILES_DIR + File.separator + "exported.xml";
        private int mDbVersion = 0;
        private SQLiteDatabase mDataBase;

        public cImportExport(SQLiteDatabase db, String destXml, Integer dbVersion) {
            this.mDataBase = db;
            this.mXmlFilePath = destXml;
            this.mDbVersion = dbVersion;
        }

        public boolean Export() {
            cDbExport dbDump = new cDbExport(mDataBase, mXmlFilePath, mDbVersion);
            dbDump.exportData();
            return true;
        }
...

cDbExport初始化代码:

    class cDbExport {
        private String mDestXmlFilename;
        private SQLiteDatabase mDb;
        private Exporter mExporter;
        private int mDbVersion = 0;


        public cDbExport(SQLiteDatabase db, String destXml, Integer dbVersion) {
            mDb = db;
            mDestXmlFilename = destXml;
            mDbVersion = dbVersion;
...

2 个答案:

答案 0 :(得分:1)

你永远不应该致电setVersion

升级版本的正确方法是更改​​SQLiteOpenHelper

的构造函数中的参数
MyDatabaseHelper(Context context) {
   super(context, "databasename", null, <this is the version>); 
}

super调用中的最后一个参数是数据库的版本

答案 1 :(得分:0)

我发现每次app启动时都会有一些复制DB的功能,所以问题就解决了。