我正在尝试升级我的数据库,一切都很好,但user_version不会升级,但每次启动应用程序。它会去onUpgrade并一次又一次地执行这个升级。
这里有一个类似的问题onUpgrade database Android version number not increasing,但他没有找到任何答案,所以我决定再次提问,如何增加和保存db版本?
我尝试使用setVersion
,PRAGMA
,将其设置在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_db
和ps_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;
...
答案 0 :(得分:1)
你永远不应该致电setVersion
升级版本的正确方法是更改SQLiteOpenHelper
MyDatabaseHelper(Context context) {
super(context, "databasename", null, <this is the version>);
}
super
调用中的最后一个参数是数据库的版本
答案 1 :(得分:0)
我发现每次app启动时都会有一些复制DB的功能,所以问题就解决了。