3 Stimmen

Erstellen einer Datenbank mit statischen (nicht editierbaren) Daten bei der Installation in einer Android-Anwendung

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:

  1. Wo sollte die Methode insertAllGames() aufgerufen werden? Sollte es hier ein "create if not exists" geben?
  2. Sieht das Code-Skelett nach einem guten Verfahren zur Erstellung einer solchen Datenbank aus?
  3. 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?
  4. Befindet sich die "drop table" (oder "alter table") an der richtigen Stelle?

Vielen Dank im Voraus!

1voto

pancake Punkte 3081

Die Speicherung dieser Art von Konfigurationsdaten in einer statischen Datenbank ist in Ordnung - kein Grund, ein eigenes Dateiformat zu erfinden (und einen Parser zu schreiben), wenn die Daten gut für eine Datenbank geeignet sind. Eine gute Methode dafür wird hier beschrieben:

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

und hier im Detail besprochen:

Lieferung einer Anwendung mit einer Datenbank

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X