2010-01-19 9 views
6

Kann mir jemand sagen, wie man die Datenbank in Android aktualisieren. Ich habe eine App mit einer eingebetteten Datenbank erstellt. Ich habe die Version der Datenbank im Manifest geändert und die On-Update-Methode erstellt. Ich wollte es testen, um zu sehen, ob die Datenbank korrekt aktualisiert wurde, aber wenn ich den adb-Befehl verwende, erlaubt mir nur die Option -r, eine Neuinstallation durchzuführen, aber die Datenbank bleibt erhalten. Gibt es eine Möglichkeit, den adb-Befehl auszuführen, mit dem ich die Datenbank aktualisieren kann. Vielen Dank.Update Datenbank Android

Antwort

2

Werfen Sie einen Blick auf die folgenden Ressourcen und sehen, ob sie nützlich sind:

Delicious Bookmarks
http://delicious.com/tag/android+adb
http://delicious.com/tag/android+database

DevX: Erstellen und Datenbanken in Android
http://www.devx.com/wireless/Article/40842

Verwendung Android lernen: Datenbankprogrammierung
http://learnandroid.blogspot.com/2008/01/android-database.html

Android Database Package Zusammenfassung
http://developer.android.com/reference/android/database/package-summary.html

+0

Dank für die Links, aber ich habe nichts gesehen, dass über eine ADB Neuinstallation und Aktualisierung der Datenbank gesprochen hat. Ist es möglich, dies zu tun, erstellt meine App diese Datenbank das erste Mal gut, aber nur während der Updates ist, wenn es abstürzt. Gibt es einen Manifest-Eintrag, den ich eingeben muss? – user237259

+0

Egal, ich habe herausgefunden, was ich falsch gemacht habe, nach einigem Nachforschen habe ich herausgefunden, dass ich den Tisch nicht richtig fallen ließ und wenn ich den Tisch neu erstellen würde, würde es fehlschlagen. Am Ende habe ich die Tabelle korrekt gelöscht und anstatt den oncreate-Befehl aufzurufen, habe ich einfach eine Abfrage geschrieben, um die Tabelle in der onupdate-Methode neu zu erstellen. – user237259

+0

Ich denke, es wäre konstruktiver, wenn Sie Beispiele statt einer Reihe von (nicht verwandten) Links anbieten würden. –

3

Was war für mich die Versionsnummer für die Datenbank ändert. Dies ist die konstante Zahl, die von der onCreate() -Methode Ihres Inhaltsanbieters verwendet wird. Etwas Ähnliches funktioniert, wenn Sie keinen Inhaltsanbieter für Ihre Datenbank verwenden und direkt abfragen. Siehe Quellcodebeispiel here.

+0

Dieser Blog-Beitrag erklärt ein wenig die Grundlagen, wie Android Datenbank-Upgrades durchführt - http://www.unwesen.de/2009/09/07/android-development-database-upgrades/2/ – r1k0

1

Was für mich funktionierte, ist die Änderung der Versionsnummer Parameter, die ich an die DBOpenHelper-Klasse, die die SQLiteOpenHelper erweitert (die Klasse zum Erstellen/Lesen/Schreiben/etc ... der Android-Datenbank). Wenn der Versionsnummer-Parameter inkrementiert wird, wird die OnUpdate() - Funktion einmal für den neuen Wert dieses Parameters aufgerufen.

7

Hier ist, wie ich meine updateRow Methode behandeln würde:

public void updateRow(long rowId, String code, String name) { 
     ContentValues args = new ContentValues(); 
     args.put("code", code); 
     args.put("name", name); 
     db.update(DATABASE_TABLE, args, "_id=" + rowId, null); 
} 
+1

Gibt es eine Möglichkeit, dies zu tun für mehrere Zeilen gleichzeitig, anstatt "Update" für jedes zu nennen? – Gaffi

1

Wenn durch Aktualisieren Sie meinen Wiederaufbau (wie ich während der Entwicklung zu tun, wenn ich mit einer neuen Datenbank startet jedes Mal meiner Anwendung gestartet werden soll), dann füge dieser Code, bevor Sie die Datenbank in Ihrer Anwendung zugreifen:

this.getContext().getApplicationContext().deleteDatabase(DATABASENAME); 

ODER

-t er Pfad zu Ihrer Datenbank:

SQLiteHelper sql_database_helper = new SQLiteHelper(this.getContext().getApplicationContext()); 
File dbFile = getDatabasePath(DATABASENAME); 
Log.v("XIX","DB FILE PATH:"+dbFile.getAbsolutePath()); 

dann Ihre Datenbank über die Eingabeaufforderung löschen:

> adb devices 
List of devices attached 
3246%$%^$&17 device 
> adb shell 
$ su 
su 
rm mydatapath 

Hinweis: Sie können nicht in der Lage sein, den su Befehl zuzugreifen, ohne dass Ihr Telefon

Erklärung Cracken : Wenn Sie nicht dem Rat von r1k0 folgen wollen (was wahrscheinlich der richtige Weg ist, wenn Sie eine bereits veröffentlichte App aktualisieren), dann können Sie einfach die Datenbank mit den folgenden adb-Befehlen und einem Restar löschen t Ihrer App ruft die Methode onCreate erneut auf.

1

Ich rate nicht auf diese Weise zu verwenden:

public void updateRow(long rowId, String code, String name) { 
     ContentValues args = new ContentValues(); 
     args.put("code", code); 
     args.put("name", name); 
     db.update(DATABASE_TABLE, args, "_id=" + rowId, null); 
} 

Ihre App zu SQL-Injection-Angriff anfällig sein werden, ist der beste Weg, dies zu tun, ist so etwas wie diese:

public void updateRow(long rowId, String code, String name) { 
     ContentValues args = new ContentValues(); 
     args.put("code", code); 
     args.put("name", name); 
     String whereArgs[] = new String[1]; 
     whereArgs[0] = "" + rowId; 
     db.update(DATABASE_TABLE, args, "_id= ?", whereArgs); 
}