私は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の場合、コードを変更するにはどうすればよいですか?!)
とても有難い!