Löschen einer Tabelle bei PlayStore update

kuzdu

Aktives Mitglied
Hallo Community,

ich betreibe eine App, bei der mit jedem Update eine Datenbank mit zahlreichen Begriffen aktualisiert werden soll. Dafür gebe ich die Datenbank Verwaltung.db mit. In der Verwaltung ist die Tabelle Begriffe.

Die Struktur von Begriffe war in der 1. Version: ID, x,x
Für die 2. Version habe ich die Struktur wegen eines Tutorials verändert in: _id,x,x

Das Update hat die App total zerstört, weil im Code meine Abfragen einer _id galten. Allerdings war in der Tabelle noch die ID-Spalte existent, weshalb folgender Fehler erschien:

android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, FRAGE, KATEGORIE, KATEGORIEID, LASTACCES, LASTUPDATE FROM KATEGORIEN ORDER BY LASTUPDATE DESC limit 1

D.h. die ursprüngliche Tabelle Begriffe wurde nicht gelöscht. Der Fehler ist klar. Allerdings sollte folgender Code eigentlich dafür sorgen, dass die Datenbank neu aufgesetzt wird:


Code:
@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			Log.w(MySQLiteHelper.class.getName(),
				"Upgrading database from version " + oldVersion + " to "
						+ newVersion + ", which will destroy all old data");
			
		
		db.execSQL("DROP TABLE IF EXISTS " + DATABASE_NAME);
		System.out.println("TABLE GEDROPPT");
		onCreate(db);
	}

Das 1. Update hat also dafür gesorgt, dass jeder der die App schon besaß, sie nochmal umständlich über den Play Store laden musste und nicht einfach upgraden konnte. Weil die Anzahl der aktiven Benutzer nun schon deutlich gewachsen ist, möchte ich denselben Fehler beim 2. Update nicht nochmal machen.

Was übersehen ich bei meinem Code? Ich dachte die onUpgrade-Methode wird bei jedem Appaufruf einmal automatisch abgefragt? Kann mich jemand aufklären?

Oder muss ich ein SQLite-Update iwie im Manifest mitteilen?

Mir kommt es so vor, dass wenn ich über eclipse die App auf mein Handy spiele, das nicht derselbe Prozess ist wie wenn man über den Play Store eine App upgradet? Kann das sein?

Mir ist nur wichtig, dass die Benutzer ein Upgrade so komfortabel wie möglich genießen :)
 

dzim

Top Contributor
Ich hab den Code unserer App gerade mal gecheckt und wir machen es da auf die selbe Tour... Kann also von der Seite her kein Problem bei dir entdecken.

Und nein: Die Methode wird nicht jedes mal Aufgerufen, sondern nur, wenn sich deine DB-Version ändert. Ob die sich geändert hat legt man ja im Konstuctor fest. Da du deinen Code nur in Auszügen hier zu stehen hast, kann ich natürlich nicht sagen, ob es da noch ein Problem gibt.

Java:
public class MyDBOpenHelper extends SQLiteOpenHelper {

  private static final in DB_VERSION = 2;

  public MyDBOpenHelper(Context c) {
    super(c, "myDatabase.db", null, DB_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
    db.execSQL("<some-create-stmt>");
  }

  @Override
  public void onUpdate(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("<some-drop-stmt>");
    onCreate(db);
  }
}

Das wichtige ist, das sich DB_VERSION ändert: Wenn du signifikante Änderungen an der DB hast, dann setzt du im nächsten Build einfach die Zahl von jetzt "2" auf z.B. "3".
Bei mir hat es jedenfalls so immer geklappt.
 

kuzdu

Aktives Mitglied
Das wichtige ist, das sich DB_VERSION ändert: Wenn du signifikante Änderungen an der DB hast, dann setzt du im nächsten Build einfach die Zahl von jetzt "2" auf z.B. "3".
Bei mir hat es jedenfalls so immer geklappt.

Das wird es wohl gewesen sein. Das habe ich nie beachtet, naja jetzt bin ich wieder klüger. Vielen Dank!

Wohl unwichtig, aber mein Konstruktor sieht so aus:

Code:
public MySQLiteHelper(Context context) {
			super(context, DATABASE_NAME, null, DATABASE_VERSION);
			this.myContext = context;
		}

	@Override
		public void onCreate(SQLiteDatabase database) {
			
			database.execSQL(TABLE_CREATE_KATEGORIEN);
			System.out.println("Tabelle KATEGORIEN erfolgreich erstellt");
			database.execSQL(TABLE_CREATE_RATE);
			System.out.println("Tabelle RATE erfolgreich erstellt");
			database.execSQL(TABLE_CREATE_FULLVERSION);
			System.out.println("Tabelle FULLVERSION erfolgreich erstellt");
		
		}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Android ListView swipe zum löschen Android & Cross-Platform Mobile Apps 1
N Android Display nicht löschen bzw. neu laden Android & Cross-Platform Mobile Apps 2
K Nullpointer beim Löschen von Datenbankeintrag, je nachdem wo der Befehl steht Android & Cross-Platform Mobile Apps 5
A Android Eine Datei in Android löschen, aber wie ? Android & Cross-Platform Mobile Apps 24
A Leichen löschen Android & Cross-Platform Mobile Apps 6
N Zeichen im String löschen? Android & Cross-Platform Mobile Apps 18
T Lesen / Schreiben einer Textdatei - SD-Karte Android & Cross-Platform Mobile Apps 42
OnDemand Allgemeine Fragen zu einer App Android & Cross-Platform Mobile Apps 4
I Foto mit einer bestimmten Auflösung aufnehmen und als Datei ablegen. Android & Cross-Platform Mobile Apps 5
Jose05 Wie kann man mit einer App Geld verdienen? Android & Cross-Platform Mobile Apps 6
T Android Studio: Einen Button in einer For Schleife verwenden Android & Cross-Platform Mobile Apps 2
M Activity einer anderen App mit result Android & Cross-Platform Mobile Apps 2
J Android Zugriff auf eine Datei, diese von einer anderen App erstellt wurde? Android & Cross-Platform Mobile Apps 11
Mo1234 Plattform in einer App. Bitte um Hilfe! Android & Cross-Platform Mobile Apps 8
A Mit Java neues item in ein string-array einer Strings.xml schreiben Android & Cross-Platform Mobile Apps 4
P Android Wie bestimme ich den Dateinamen einer Bilddatei? Android & Cross-Platform Mobile Apps 11
B Falsche ausgabe einer Rechnung! Android & Cross-Platform Mobile Apps 8
M Android Dynamische SchriftGröße einer TextView Android & Cross-Platform Mobile Apps 3
J Android Suche in einer ListView Android & Cross-Platform Mobile Apps 3
G Android Daten in einer Datenbank speichern Android & Cross-Platform Mobile Apps 1
J Android button mithilfe einer Methode automatisch erstellen Android & Cross-Platform Mobile Apps 6
JavaWolf165 Android Fehler beim Speichern/Downloaden einer Datei Android & Cross-Platform Mobile Apps 2
S Android Probleme beim Verbinden mit einer HTTPS Seite Android & Cross-Platform Mobile Apps 4
B Android wie kann ich in einer xml nach bestimme item suchen (DOM) Android & Cross-Platform Mobile Apps 7
C Android Diese Art von Werbung in einer App? Android & Cross-Platform Mobile Apps 1
? ständig ändernden Inhalten in einer App Android & Cross-Platform Mobile Apps 2
R Android Eine Website-frame in einer App Android & Cross-Platform Mobile Apps 4
H Android Aufrufen von "setContentView" in einer anderen Klasse Android & Cross-Platform Mobile Apps 3
S Die Erstellung einer eigenen App,Kosten? Android & Cross-Platform Mobile Apps 1
M Android Speichern einer .txt Datei im InternalStorage Android & Cross-Platform Mobile Apps 2
B Fragen zum Speichern einer Datei auf dem Gerät? Android & Cross-Platform Mobile Apps 7
C Auf Play Store verlinken - Code in einer Extraklasse Android & Cross-Platform Mobile Apps 1
G Thread in einer Service erstellen Android & Cross-Platform Mobile Apps 0
B Android Spieler Steuerung auf einer Map mit Berge? Android & Cross-Platform Mobile Apps 7
M Android Quellcode einer Website Android & Cross-Platform Mobile Apps 7
H Veröffentlichung einer Bezahl-App Android & Cross-Platform Mobile Apps 5
Robat Android ConcurrentModificationException während einer for Schleife Android & Cross-Platform Mobile Apps 15
D Android EditText und TextView haben unterschiedliche größen innerhalb einer TableRow Android & Cross-Platform Mobile Apps 18
M Umlaute im Quellcode einer Website richtig darstellen Android & Cross-Platform Mobile Apps 4
M Quellcode einer Website auslesen Android & Cross-Platform Mobile Apps 5
T Android platzsparende Codierung verschlüsselter Texte in einer URI Android & Cross-Platform Mobile Apps 8
S Android "Weiches wechseln" zwischen Views in einer Activity Android & Cross-Platform Mobile Apps 3
F Bei einer Android Java App, Objekte erstellen Android & Cross-Platform Mobile Apps 2
G eine Methode einer anderen Activity aufrufen Android & Cross-Platform Mobile Apps 9
G Einbinden einer Bibliothek's App Android & Cross-Platform Mobile Apps 2
G Daten von einer Activity zur nächsten übergeben Android & Cross-Platform Mobile Apps 6
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
A Kann nicht in TextView einer anderen Klasse schreiben - wieso? Android & Cross-Platform Mobile Apps 9
A Beenden einer 2ten Activity Android & Cross-Platform Mobile Apps 3
T Android Multiple SDK-Support in einer Apk Android & Cross-Platform Mobile Apps 5
R Android Unterschiedliche Versionen von Android in einer App Android & Cross-Platform Mobile Apps 7
D Mehrere Kopien von einer Form Android & Cross-Platform Mobile Apps 7
M Wie in einer anderen "nicht canvas" klasse zeichne Android & Cross-Platform Mobile Apps 5
S Problem mit Einbindung einer externer Bibliothek Android & Cross-Platform Mobile Apps 2
S Variable Anzahl von Bytes aus einer Datei lesen Android & Cross-Platform Mobile Apps 2
P Erstellen einer Jar-File Android & Cross-Platform Mobile Apps 2
L Android Wie erstelle ich eine dynamische Tabelle (TableLayout)? Android & Cross-Platform Mobile Apps 2
B Android SQLite Tabelle neue Spalten hinzufügen Android & Cross-Platform Mobile Apps 8
S Combobox mit 2 Spalten aus MySql Tabelle Android & Cross-Platform Mobile Apps 1
B TableLayout verhält sich nicht wie eine Tabelle Android & Cross-Platform Mobile Apps 3
B Android Tabelle dynamisch sortieren / filtern möglich Android & Cross-Platform Mobile Apps 2
G Android Tabelle dynamisch erzeugen Android & Cross-Platform Mobile Apps 7
G Java ME Tabelle in J2ME Android & Cross-Platform Mobile Apps 4

Ähnliche Java Themen

Neue Themen


Oben