android - plugin - wordpress titel tag bearbeiten



Wie füge ich eine neue Spalte zur Android SQLite Datenbank hinzu? (8)

Ich habe ein Problem mit Android SQLite Datenbank.

Ich habe eine Tabelle, die ein Feld enthält. StudentFname und diese Anwendung funktioniert gut mit Android 2.3.1 und jetzt, wenn ich ein anderes Feld anschließe, dann funktioniert meine Anwendung nicht richtig.

Kann mir jemand helfen, der Datenbank sehr gut kennt,

https://src-bin.com


Answer #1

Ändern Sie einfach Ihren Code

private final int DATENBANK_VERSION = 1;

zu

private static final int DATENBANK_VERSION = 2;


Answer #2

@ Aamirkhan.i denke du hättest das Problem, das du in den Kommentaren erwähnt hast, längst wieder gelöst.ich denke du hast die Datenbankversion nicht erhöht. Die Antworten hier sind einfach. Ich schreibe das, weil es jedem helfen kann, der seine Datenbank-Versionsnummer nicht erhöht oder geändert hat, wenn sie eine Tabelle ändern.


Answer #3

Die einfachste Möglichkeit, eine neue Spalte in einer Tabelle zu erstellen, besteht darin, der onUpgrade () -Methode in der SQLiteOpenHelper-Klasse SQL hinzuzufügen. Mögen:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    switch (oldVersion) {
        case 1:
            db.execSQL(SQL_MY_TABLE);

        case 2:
            db.execSQL("ALTER TABLE myTable ADD COLUMN myNewColumn TEXT");
    }
}

Answer #4

Ich bin auf diesen Thread gestoßen, als ich Hilfe für meine eigene App brauchte, sah aber Probleme mit vielen der Antworten. Ich würde folgendes empfehlen:

private static final String DATABASE_ALTER_TEAM_1 = "ALTER TABLE "
    + TABLE_TEAM + " ADD COLUMN " + COLUMN_COACH + " string;";

private static final String DATABASE_ALTER_TEAM_2 = "ALTER TABLE "
    + TABLE_TEAM + " ADD COLUMN " + COLUMN_STADIUM + " string;";

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
         db.execSQL(DATABASE_ALTER_TEAM_1);
    }
    if (oldVersion < 3) {
         db.execSQL(DATABASE_ALTER_TEAM_2);
    }
}

Sie möchten sicherstellen, dass der Code funktioniert, wenn Benutzer mehr als 1 Version aktualisieren und dass die Update-Anweisung nur das eine Upgrade ausführt, das benötigt wird. Für ein bisschen mehr darüber, lesen Sie diesen blog .


Answer #5

Ich habe den folgenden Ansatz gemacht, es ist für mich resovled

wenn DB Version: 6

Ex : There is a table with 5 columns

Beim Upgrade auf: 7 (ich füge 1 neue Spalte in den 3 Tabellen hinzu)

 1. We need to add the columns when creating a table

 2. onUpgrade method:

 if (oldVersion < 7) 
 { 
    db.execSQL(DATABASE_ALTER_ADD_PAPER_PAID);
    db.execSQL(DATABASE_ALTER_LAST_UPLOADED);
    db.execSQL(DATABASE_ALTER_PAPER_LABEL); 
 }

Wo: "DATABASE_ALTER_ADD_PAPER_PAID" ist Abfrage.

EX: public static final String DATABASE_ALTER_ADD_PAPER_PAID = "ALTER TABLE "
                + TableConstants.MY_PAPERS_TABLE + " ADD COLUMN " + COLUMN_PAPER_PAID + " TEXT;";

Nach den obigen zwei Operationen funktioniert es für den neuen Benutzer und App-Upgrade-Benutzer


Answer #6

Ich stieß auf den Link bei der Suche nach dem gleichen Problem. Es wird erläutert, wie das Upgrade verwendet wird. blog

Es erklärt, warum Sie diesen Code verwenden

 @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion < 2) {
             db.execSQL(DATABASE_ALTER_TEAM_1);
        }
        if (oldVersion < 3) {
             db.execSQL(DATABASE_ALTER_TEAM_2);
        }
    }

Answer #7

Um der Tabelle eine neue Spalte hinzuzufügen, müssen Sie ALTER . In android können Sie die neue Spalte innerhalb der onUpgrade() hinzufügen.

Sie können sich wundern, wie onUpgrade() die neue Spalte hinzufügen wird?

Wenn Sie eine Unterklasse von SQLiteOpenHelper , müssen Sie den Superklassenkonstruktor aufrufen: super(context, DB_NAME, null, 1); in Ihrem Klassenkonstruktor. Dort habe ich 1 für Version bestanden.

Wenn ich die Version 1 nach oben ( 2 oder höher) onUpgrade() , wird onUpgrade() aufgerufen. Und führen Sie die SQL-Änderungen durch, die ich durchführen möchte. Mein Klassenkonstruktor nach dem Ändern der Version:

public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, 2);//version changed from 1 to 2
}

Bei SQL-Modifizierungsüberprüfungen vergleicht der Superklassenkonstruktor die Version der gespeicherten SQLite-Datenbankdatei mit der Version, die ich an super() . Wenn diese (früheren und onUpgrade() ) Versionsnummern unterschiedlich sind, wird onUpgrade() aufgerufen.

Der Code sollte folgendermaßen aussehen:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // add new columns to migrate to version 2
    if (oldVersion < 2) { 
        db.execSQL("ALTER TABLE " + TABLE_NAME + "ADD COLUMN school VARCHAR(250)");
    }
    // add new columns to migrate to version 3
    if (oldVersion < 3) { 
        db.execSQL("ALTER TABLE " + TABLE_NAME + "ADD COLUMN age INTEGER");
    }
}

Answer #8

Vielleicht ein etwas eleganterer Ansatz mit switch statt if / then, der von jedem Schema auf das neueste Schema upgraden wird ...

Hier ist auch eine anständige Seite über die Syntax zum Ändern einer Tabelle: http://alvinalexander.com/android/sqlite-alter-table-syntax-examples

public static final String TABLE_TEAM = "team";
public static final String COLUMN_COACH = "coach";
public static final String COLUMN_STADIUM = "stadium";


private static final String DATABASE_ALTER_TEAM_TO_V2 = "ALTER TABLE "
    + TABLE_TEAM + " ADD COLUMN " + COLUMN_COACH + " TEXT;";

private static final String DATABASE_ALTER_TEAM_TO_V3 = "ALTER TABLE "
    + TABLE_TEAM + " ADD COLUMN " + COLUMN_STADIUM + " TEXT;";


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    switch (oldVersion)
    {
        case 1:
            //upgrade from version 1 to 2
            db.execSQL(DATABASE_ALTER_TEAM_TO_V2);
        case 2:
            //upgrade from version 2 to 3
            db.execSQL(DATABASE_ALTER_TEAM_TO_V3);

        //and so on.. do not add breaks so that switch will
        //start at oldVersion, and run straight through to the latest

    }

}




sqlite