3

Android アプリケーションでデータベースを更新しようとしています。バージョン番号を更新すると onUpgrade が呼び出されますが、バージョン番号が増加しないため、データベースにアクセスするたびに onUpgrade が呼び出されます。これが私のコードです:

private final static int DB_VERSION = 8;

        public DataBaseHelper(Context context) {

        super(context, DB_NAME, null, DB_VERSION);
        this.myContext = context;
    }   
        @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG, "in onCreate");
        try {
            copyDataBase();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d(TAG, "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
        myContext.deleteDatabase(DB_NAME);
        Log.d(TAG, "the version is " + db.getVersion());
        db.setVersion(newVersion);
        Log.d(TAG, "the version is " + db.getVersion());
        onCreate(db);           
    }

なぜこれが起こっているのか知っている人はいますか?

4

2 に答える 2

2

バージョンを手動で設定しようとしないでください。(これはすべて処理されます。)

データベースを削除しようとしないでください。あなたはそれをアップグレードしている最中であり、削除したばかりのデータベースのバージョンを手動で設定してもうまくいかないことは驚くべきことではありません。

onUpgrade必要なのは、テーブルの構造に必要な変更を加えることだけです。現在のテーブル (データベースではない) を削除してから再作成することでこれを行う場合は、それで問題ありません。

テーブルのデータを保持する必要がある場合は、次の質問を参照して、その方法に関する提案を確認してください: SQLite データベースをあるバージョンから別のバージョンにアップグレードしますか?

于 2011-09-26T12:59:57.820 に答える
0

最終的に、assets フォルダーに別のデータベースを追加しました。私はそれが最善の解決策ではないことを知っていますが、うまくいきます。今回アプリがアップグレードされると、古いデータベースではなく、新しい名前を持つ新しいデータベースが書き込まれます。古いものが存在するかどうかを確認し、存在する場合は削除します。

于 2011-10-21T17:16:49.410 に答える