2012-03-14 6 views
3

情報:Androidアプリケーションでインストールに静的(編集不可能な)データのデータベースを作成します

は、だから私は、アプリケーションがインストールされているデータベースを作成していないいくつかのデータを挿入し、決してそれらを再度変更する場合、のみデータベースから読み込みます。例:Angry Birdsがインストールされているときのレベルを考えると、どこかから読み込まれ、最初のインストール時にデータベースに格納され、そこから読み取るだけです。変更されることはありません(ゲームが更新されない限り)。

私は同じように私の考え「怒っている鳥」ゲームのレベルについては、次のスケルトンコード持っている:私もGameDBHelperを使用して、クラスのスケルトンコードを持っている一般的な方法であるため

public class GameDBHelper extends SQLiteOpenHelper{ 
    private SQLiteDatabase database; 
    public static final String TAG = GameDBHelper.class.getSimpleName(); 

    //Insert static database variables here 

    public GameDBHelper(Context ctx) { 
     super(ctx,DATABASE_NAME,null,DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DATABASE_CREATE_STATEMENT); 
     insertAllGames(); //Method to read data from all game files and insert into database 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("drop table if exists " + TABLE_GAMES); //Should be "alter table" 
     Log.d(TAG, "onUpgrade dropped table " + TABLE_GAMES); 
     this.onCreate(db); 
    } 

    private void insertAllGames(){ 
     //Method that reads all files and inserts into database 
    } 
} 

を。質問

public class GameDataSource { 
    private static final String TAG = GameDataSource.class.getSimpleName(); 
    private SQLiteDatabase database; 
    private GameDBHelper gameDBHelper; 

    public GameDataSource(Context con, OTHER_DATA_AS_NEEDED) { 
     gameDBHelper = new GameDBHelper(con); 
     Log.d(TAG, "GameDataSource object created!"); 
    } 

    public Cursor query(DATA_AS_NEEDED) throws SQLException{ 
     database = gameDBHelper.getReadableDatabase(); 
     return database.query(QUERY_STATEMENT); 
    } 
} 

:これはのみの活動に使用されるクエリメソッドを持っている必要があり insertAllGames()メソッドが呼び出されるべき

  1. ?ここには「存在しない場合は作成する」というものがいくつかありますか?
  2. このようなデータベースを作成するためのスケルトンコードは良い習慣のように見えますか?
  3. これは静的なテーブルなので、「ドロップテーブル」を使用しても問題ありませんか、または常に「alter table」を使用するようにしてください。もしそうなら、あなたは "alter table"をうまく使うための例を教えてください。
  4. "ドロップテーブル"(または "alter table")が正しい場所に配置されていますか?事前に

ありがとう!

+0

あなたが保存しようとしているデータのどのタイプ?あなたがレベルデータを意味するならば、いいえ、DBは答えではありません。 Angry Birdsのようなゲームでは、独自のファイル形式を使用してAPKファイル内にレベルを保存している可能性があります。そのようなデータをDBに書き込むことは、非常に遅く無駄になります。 – dymmeh

+0

フォルダアセットに作成されたSQLiteデータベースを、すべてのデータが入ったフォルダに追加することができます。あなたのアプリケーションに付属します。 –

+0

@dymmehデータベースから読み取るよりレベルに必要なデータのプレーンテキストファイルをスキャンする方が早いでしょうか?私が考えているデータは基本的にテキストと数字です。 –

答えて

1

このような構成データを静的データベースに格納することは問題ありません。データがデータベースに適している場合は、独自のファイル形式を作成して(パーサーに書き込む)必要はありません。これを行うための良い方法はここに覆われている:

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

、ここで詳細に議論を:

Ship an application with a database

関連する問題