Die Informationen:
Ich möchte also eine Datenbank erstellen, wenn die Anwendung installiert wird, einige Daten einfügen und sie nie wieder ändern, sondern nur aus der Datenbank lesen. Als Beispiel: Denken Sie an die Ebenen in Angry Birds, wenn es installiert ist, werden sie wahrscheinlich von irgendwo gelesen und in eine Datenbank bei der ersten Installation und nur von dort aus gelesen. nie geändert (es sei denn, das Spiel aktualisiert wird).
Ich habe das folgende Codegerüst für die Level meines "Angry Birds"-Spiels auf die gleiche Weise erstellt:
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
}
}
Wie es üblich ist, habe ich auch ein Skelett-Code für eine Klasse mit dem GameDBHelper. Diese sollte nur eine Abfragemethode haben, die in einer Activity verwendet wird:
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);
}
}
Die Fragen:
- Wo sollte die Methode insertAllGames() aufgerufen werden? Sollte es hier ein "create if not exists" geben?
- Sieht das Code-Skelett nach einem guten Verfahren zur Erstellung einer solchen Datenbank aus?
- Da es sich um eine statische Tabelle handelt, ist es in Ordnung, "drop table" zu verwenden, oder sollte man immer versuchen, "alter table" zu verwenden? Wenn ja, könnten Sie bitte ein Beispiel für eine gute Verwendung von "alter table" geben?
- Befindet sich die "drop table" (oder "alter table") an der richtigen Stelle?
Vielen Dank im Voraus!