0

私はデータベースを持っていて、アプリケーションの次の更新時にそのデータベースを変更したいのですが、データベース(アプリケーションディレクトリ内)の現在のデータを失いたくないのです。そのデータを新しいデータベースにコピーして削除する必要があります古いデータベース..どうすればそれを達成できますか?それについて他に何か考えがありますか...

前もって感謝します..

これは私の現在のデータベースコードです...

public class DbUtils {
public static String DB_PATH;
private String DB_NAME;
File dbDir;
private SQLiteDatabase dataBase;
public DbUtils(File fileDirectory, String sqliteFileName) {

    this.DB_NAME = sqliteFileName;
    dbDir = fileDirectory;
}

public void createDatabaseIfNotExists(Context context) throws IOException {
    boolean createDb = false;

    File dbFile = new File(dbDir.getAbsolutePath() + "/" + DB_NAME);
    DB_PATH = dbFile.getAbsolutePath();

    if (!dbDir.exists()) {
        dbDir.mkdir();
        createDb = true;
    } else if (!dbFile.exists()) {
        createDb = true;
    } else {
        boolean doUpgrade = false;

        if (doUpgrade) {
            dbFile.delete();
            createDb = true;
        }
    }

    if (createDb) {
        InputStream myInput = context.getAssets().open(DB_NAME);
        OutputStream myOutput = new FileOutputStream(dbFile);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }

        myOutput.flush();
        myOutput.close();
        myInput.close();
    }
}

public SQLiteDatabase getStaticDb() {
    return dataBase = SQLiteDatabase.openDatabase(DB_PATH, null,
            SQLiteDatabase.OPEN_READWRITE);
}

public void closeDataBase(){
    if(dataBase!=null && dataBase.isOpen()){
        dataBase.close();
    }
}

 }
4

1 に答える 1

0

より一般的な解決策は、データベースを保持することですが、アプリケーションの新しいバージョンで動作するように必要なだけデータベースを変換します。これは「データベースのアップグレード」と呼ばれます。

アップグレードの途中でこのプロセスが失敗した場合、古いデータベースも新しいデータベースも存在しないのではないかと心配するかもしれません。ただし、これはデータベーストランザクションで解決できます。データベースのアップグレードプロセス全体が単一のトランザクションで発生する場合、そのトランザクションは失敗して何も実行しないため、古いバージョンのアプリケーションを引き続き使用するか、成功して新しいバージョンのアプリケーションを使用できます。

これは、データベースのアップグレードをトランザクションでラップする方法です。

SQLiteDatabase database = SQLiteDatabase.openDatabase(uri, null, SQLiteDatabase.SQLITE_OPEN_READWRITE);
database.beginTransaction();

// put your database upgrade code here, for example:
database.execSQL("ALTER TABLE MyTable ADD NewColumn int");
database.execSQL("ALTER TABLE AnotherTable ADD AnotherColumn int");

database.endTransaction();
database.setTransactionSuccessful();
于 2012-07-13T20:47:59.190 に答える