信息:
所以我想在安装应用程序时创建一个数据库,插入一些数据并且不再更改它们,只从数据库中读取。举个例子:想想愤怒的小鸟安装时的关卡,它们很可能在第一次安装时从某个地方读取并放入数据库,然后从那里读取。从未改变(除非游戏更新)。
对于我认为的“愤怒的小鸟”游戏的关卡,我有以下骨架代码:
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);
}
}
问题:
- 应该在哪里调用 insertAllGames() 方法?这里是否应该涉及一些“如果不存在则创建”?
- 框架代码看起来是创建此类数据库的好做法吗?
- 由于这是一张静态表,可以使用“drop table”还是应该一直努力使用“alter table”?如果是这样,您能否提供一个良好使用“alter table”的示例?
- “drop table”(或“alter table”)是否放置在正确的位置?
提前致谢!
最佳答案
将此类配置数据存储在静态数据库中很好 - 如果数据非常适合数据库,则没有理由发明自己的文件格式(并编写解析器)。此处介绍了执行此操作的一个好方法:
http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
并在此处详细讨论:
关于android - 在 Android 应用程序中安装时创建静态(不可编辑)数据数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9707820/