0

是否有可能(简单)获取当前数据库版本号,将其递增,然后从活动中将其传递给 SQLiteOpenHelper 的构造函数,而不是像这样对版本号进行硬编码?

活动(从 onclick 调用):

public void updatedb(){
    //pseudo-code next 2 comments
    //int incVersion = getCurrentDBVersion();<==question here
    //incVersion = incVersion + 1;
    DatabaseHandler dbincrement = new DatabaseHandler(this, incVersion);
}

SQLiteOpenHelper 扩展:

public class DatabaseHandler extends SQLiteOpenHelper{
    public DatabaseHandler(Context context, int incVersion) {
        super(context, DATABASE_NAME, null, incVersion);
    }
}
4

2 回答 2

1

是的,使用这样的东西来获取数据库版本

DatabaseHandler dh = new DatabaseHandler(this);
SQLiteDatabase db = dh.getWriteableDatabase();
int version = db.getVersion();
DatabaseHandler dhInc = new DatabaseHandler(this, version++);
于 2012-05-11T23:25:23.530 回答
0

除非您首先打开数据库,否则您无法获取当前的数据库版本号。因此,如果您的意图是获取已安装的数据库版本,将其递增,然后使用新版本调用 SQLiteOpenHelper 构造函数,那么我不相信 Sam 的建议会满足您的要求。

原因如下:

1) DatabaseHandler 构造函数的第一行必须调用 SQLiteOpenHelper (super) 构造函数,提供您的数据库版本。
2) 调用 getWriteableDatabase 会自动导致调用 DatabaseHandler 中的 onOpen 和/或 onUpgrade/onDowngrade 方法。调用哪个 onXXXX 方法取决于 SQLiteOpenHelper 将安装的数据库版本与您在上面的构造函数初始化中提供的版本的比较。

如果不先提供一个,我不知道有一种简单的方法可以找出已安装的数据库版本。

于 2012-12-26T15:07:29.053 回答