1

SQLiteデータベースにほとんど情報を保存しないアプリケーションを作成しました。SQLiteデータベースはデバイスの内部メモリにあり、アプリのインストール中に作成され、それぞれのアプリケーションを削除すると削除されることがわかっています。

新しいバージョンのアプリケーションをリリースしているので、古いバージョンを削除して新しいバージョンをインストールすると、古いバージョンで保存した完全な情報が失われました。

私の質問は、SQLiteデータベースから古いバージョンのデータを何らかの方法で取得して、新しいバージョンで使用および維持できるようにすることです。

ユーザーが古いデータを失わないように、私に提案してください。

4

2 に答える 2

3

ユーザーがアプリケーションを更新した場合、データベースはそのまま残ります。古いバージョンをアンインストールして新しいバージョンを再インストールすると、データベースが削除されます。

于 2012-08-09T14:32:59.540 に答える
1

私のコメントを参照してください。心配する必要はないと思います。

ただし、データベースをバックアップして復元する場合は、次の方法でそれを SD カードに送信してから読み込みます (それぞれの場合で以前に存在していたものを上書きします)。

public void backup() {
    try {
        File sdcard = Environment.getExternalStorageDirectory();
        File outputFile = new File(sdcard,
                "yourDB.bak");

        if (!outputFile.exists()) 
             outputFile.createNewFile(); 

        File data = Environment.getDataDirectory();
        File inputFile = new File(data,
                "data/your.package.name/databases/yourDB.sqlite");
        InputStream input = new FileInputStream(inputFile);
        OutputStream output = new FileOutputStream(outputFile);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = input.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
        output.flush();
        output.close();
        input.close();
    } catch (IOException e) {
        e.printStackTrace();
        throw new Error("Copying Failed");
    }
}

public void restore() {
    try {
        File sdcard = Environment.getExternalStorageDirectory();
        File inputFile = new File(sdcard,
                "yourDB.bak");

        File data = Environment.getDataDirectory();
        File outputFile = new File(data,
                "data/your.package.name/databases/yourDB.sqlite");

        if (!outputFile.exists()) 
             outputFile.createNewFile(); 

        InputStream input = new FileInputStream(inputFile);
        OutputStream output = new FileOutputStream(outputFile);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = input.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
        output.flush();
        output.close();
        input.close();
    } catch (IOException e) {
        e.printStackTrace();
        throw new Error("Copying Failed");
    }
}
于 2012-08-09T14:31:46.863 に答える