1

私はAndroid用のクイズタイプのアプリケーションを開発しており、時間の経過とともに質問バンクを拡張できるようにすることを目指しています。これを行うために、SQLiteデータベースを事前にパッケージ化し、更新を確認してアップグレード時に上書きします。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if(newVersion>oldVersion) {
        InputStream inputStream = null;
        OutputStream outStream = null;
        String dbFilePath = DATABASE_PATH + DATABASE_NAME;
        try {
            inputStream = myContext.getAssets().open("questions.db");
            outStream = new FileOutputStream(dbFilePath);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = inputStream.read(buffer))>0) {
                outStream.write(buffer, 0, length);
            }

            outStream.flush();
            outStream.close();
            inputStream.close();

        } catch(IOException e) {
            throw new Error("problem copying database from resource file");
        }
    }
}

私が確信していないのは、質問が試行されたかどうかを保存する方法です(そして、アップグレード時にそれが上書きされないようにします)。私の選択肢は次のようです。

1)すべての質問ID(潜在的に多くのsharedprefs)のブール共有設定を保存します

2)質問に回答したデータを保持するための別のデータベースを作成します(やり過ぎのようです)

3)結果データを同じデータベースの別のテーブルに保持し、アップグレード時に質問テーブルのみが上書きされるようにします

4)ユーザーデータを質問テーブル内の独自の列に保持しますが、その列が上書きされないようにします。

上記の中で、4が最もエレガントなようです(可能かどうかはわかりませんが)。それを実行するための最良の方法は何ですか(そしてそれがオプション3または4の場合、コードを変更するにはどうすればよいですか?!)

とても有難い!

4

2 に答える 2

0

古いデータベースにデータを保存したい場合は、SQL を使用して両方のデータベースのレコードを解析/読み取ります。新しい質問を古いデータベースに挿入するだけで、新しいデータベースを取得すると、「INSERT OR UPDATE」ステートメントを介してすべてのデータが取得されます。

于 2012-06-07T21:31:22.073 に答える
0

ありえない!SQLite データベースの構造上、ファイルを自分で変更することはできません

しかし、おそらくあなたは代替する必要があります:

  1. すべてのデータベースを読み取り、希望のテーブルを変更してから書き込みます。
  2. より書き換え可能なテーブルを別に保管してください。(この解決策はダミーです、私は知っています)
于 2012-06-07T21:33:21.717 に答える