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

最初にデータベースを開かない限り、現在の db バージョン番号を取得することはできません。したがって、インストールされているデータベースのバージョンを取得し、それをインクリメントしてから、新しいバージョンで SQLiteOpenHelper コンストラクターを呼び出すことが意図されている場合、Sam が提案したものがあなたの要求を満たすとは思えません。

理由は次のとおりです。

1) DatabaseHandler コンストラクターの最初の行は、データベースのバージョンを指定して、SQLiteOpenHelper (スーパー) コンストラクターを呼び出す必要があります。
2) getWriteableDatabase を呼び出すと、DatabaseHandler で onOpen および/または onUpgrade/onDowngrade メソッドが自動的に呼び出されます。どの onXXXX メソッドが呼び出されるかは、上記のコンストラクターの初期化で指定したバージョンと、インストールされているデータベースのバージョンを SQLiteOpenHelper が比較するかどうかによって異なります。

インストールされているデータベースのバージョンを最初に提供せずに簡単に確認する方法がわかりません。

于 2012-12-26T15:07:29.053 に答える