title: Create database of static (non-editable) data on installation in Android application
body: <p><strong>The info:</strong></p>
  
  <p>So I want to create a database when the application is installed, insert some data and never change them again, only read from the database. As an example: think of the levels in Angry Birds when it is installed, they are likely read from somewhere and put into a database at first installation and just read from there on. never changed (unless the game is updated).</p>
  
  <p>I have the following skeleton code for the levels of my thought "Angry Birds" game in the same way:</p>
  
  <pre><code>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
      }
  }
  </code></pre>
  
  <p>As is common practice I also have a skeleton code for a class using the GameDBHelper. This should only have a query method which will be used in an Activity:</p>
  
  <pre><code>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);
      }
  }
  </code></pre>
  
  <p><strong>The questions:</strong></p>
  
  <ol>
  <li>Where should the insertAllGames() method be invoked? Should there be some "create if not exists" involved here?</li>
  <li>Does the skeleton code look like a good practice to create such a database?</li>
  <li>Since this is a static table, is it ok to use "drop table" or should one always strive to use "alter table"? If so, could you please provide an example for good use of "alter table"?</li>
  <li>Is the "drop table" (or "alter table") placed in the correct spot?</li>
  </ol>
  
  <p>Thanks in advance!</p>