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

标签 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”)是否放置在正确的位置?

提前致谢!

最佳答案

将此类配置数据存储在静态数据库中很好 - 如果数据非常适合数据库,则没有理由发明自己的文件格式(并编写解析器)。此处介绍了执行此操作的一个好方法:

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

并在此处详细讨论:

Ship an application with a database

关于android - 在 Android 应用程序中安装时创建静态(不可编辑)数据数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9707820/

相关文章:

sql - DB2 触发器语法之前

php - 在 php 数组中从 mysql 数据库中获取所有行到单个表 td 中?

java - 如何以编程方式扫描、查找并连接到打开的 wifi AP?

android - 在 kotlin 中更改 fragment 获取 IllegalStateException 不能为空

Android studio 3.1 运行命令不重建APK

android - channel 或 mutablesharedflow ,哪个是已弃用的 localbroadcastmanager 的更好替代品

sql - 如果在所有类别中,我如何获得特定产品?

sql - 比较同一张表中两行之间的一个字段

database - SimpleDB 选择 V​​S DynamoDB 扫描

database - 了解 3NF