在Android应用程序中安装时创建静态(不可编辑)数据的数据库

时间:2012-03-14 18:22:35

标签: android sql database

信息:

所以我想在安装应用程序时创建一个数据库,插入一些数据并且永远不要再次更改它们,只读取数据库。作为一个例子:想想在安装它时愤怒的小鸟中的等级,它们很可能从某个地方读取并在第一次安装时放入数据库,然后从那里读取。从未改变过(除非游戏更新)。

我以同样的方式对我的“愤怒的小鸟”游戏的级别进行了以下骨架代码:

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
    }
}

通常的做法是,我也有一个使用GameDBHelper的类的框架代码。这应该只有一个将在Activity中使用的查询方法:

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);
    }
}

问题:

  1. 应该在哪里调用insertAllGames()方法?这里是否应该有“创建,如果不存在”?
  2. 骨架代码看起来是创建这样一个数据库的好习惯吗?
  3. 由于这是一个静态表,可以使用“drop table”,还是应该总是努力使用“alter table”?如果是这样,请您提供一个好用“alter table”的例子吗?
  4. “drop table”(或“alter table”)是否放置在正确的位置?
  5. 提前致谢!

1 个答案:

答案 0 :(得分:1)

将这种配置数据存储在静态数据库中很好 - 如果数据非常适合数据库,没有理由发明自己的文件格式(并编写解析器)。这里有一个很好的方法:

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

并在此详细讨论:

Ship an application with a database