Wie meine eigenen sqlite-Datenbank?
Legte ich meine Datenbank-Feld im "assets" - Ordner. Und den code aus diesem blog die Datenbank kopieren nach "/data/data/my_packname/Datenbanken/", (Das kopieren von code, den ich in der onCreate () - Methode auf, wenn ich diese app) dann select * from..., um Informationen zu bekommen. Aber es gibt mir die Ausnahme: es gibt keine Tabelle.
Jemand sagte mir, wenn ich bin versucht, kopieren Sie die Datei in SQLiteOpenHelper die onCreate(), ist es zu spät. Damit die copy-Datei-code kann nicht kopieren Sie die komplette Datei.
Also muss ich verwenden, adb oder ddms ziehen Sie zuerst die Datenbank?
So, Wer kann mir beibringen, wie man eine eigene Datenbank?
Können Sie mir sagen, das setup?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich die Anleitung in diesem blog-post und Sie fand, während auf der rechten Spur, um Sie stark erschweren Sie das Problem unnötig verlängern
SQLiteOpenHelper
. Ich hatte viel mehr Glück, wie folgt:Erstellen Sie eine utility-Klasse, die schafft das statische db durch kopieren in das richtige Verzeichnis aus Vermögen, aber nicht selbst so aufgehängt, auf nach der SQLiteOpenHelper-format.
Mit dem gleichen utility-Klasse zum öffnen der db durch die Verwendung von
SQLiteDatabase.openDatabase()
Edit: Hier ist eine version dieser utility-Klasse, die ich erstellt habe; es ist nicht ganz vollständig, aber Sie bekommen die drift.
Nachdem Sie die Datenbank kopiert haben, sollten Sie versuchen schließen und erneuten öffnen SQLiteDatabase-Objekt vor der Ausführung einer Abfrage auf. Ich hatte ein ähnliches problem mit dem kopieren einer db von einem input-stream-und das ist, was Sie gelöst für mich.
hier ist meine Version von "Silvio Donnini-Code":),
jetzt können Sie aktualisieren Sie die Datenbank leicht.
Ich weiß, das ist eine alte Frage, aber ich verlor eine Menge Zeit es herauszufinden, mit der Hilfe von allen, die Antworten.
Das Problem ist, dass ein Gerät speichert eine Datenbank in seinem data/data/.../databases Ordner. Also, wenn Sie ändern, sth über die Datenbank (name, add android-Metadaten-Tabelle, Größe..) es wird nicht keinen Unterschied machen, weil der gespeicherten Datenbank und der Methode, die überprüft, vorhandene Datenbank.
Erhalten Sie die neuesten Datenbank, nachdem Sie es ändern, müssen Sie das Programm ausführen, ohne zu prüfen, für bestehende databses (z.B. statt
dbExist = checkDataBase();
machen es einfach falsch ist).Änderung:
Nachdem Sie nahm die "neue" Datenbank-Sie zurückkehren können, um die überprüfung der bestehenden.
Hoffe, dass es jemandem hilft,
dina
Ich weiß, dies ist eine alte post, aber für diejenigen, die noch hier zu bekommen, nach einer Google-oder Bing-Suche, das ist die Lösung zu dem genannten problem:
in createDataBase() es wird der folgende check;
Diese überprüft, ob es bereits eine Datenbank mit dem angegebenen Namen, und wenn nicht, erstellt eine leere Datenbank, so dass es überschrieben werden kann, mit der man in den Ordner "assets". Auf neueren Geräten funktioniert dies einwandfrei, aber es gibt einige Geräte, auf denen das nicht funktioniert. Vor allem ältere Geräte. Ich weiß nicht genau warum, aber es scheint, wie die getReadableDatabase () - Funktion erhält nicht nur die Datenbank sondern auch öffnet. Wenn Sie dann kopieren Sie die Datenbank aus dem Ordner "assets" über es, noch hat Sie den Mauszeiger auf eine leere Datenbank, und Sie erhalten die Tabelle nicht vorhanden Fehler.
So, damit es auf allen Geräten funktionieren, sollten Sie ändern Sie die folgenden Zeilen:
Selbst wenn die Datenbank geöffnet wird, in der Prüfung, es wird danach geschlossen und es wird nicht geben Ihnen keine Probleme mehr.
Beruhigen Jungs,Nach langer Forschung endlich gefunden dumme Fehler "no such table" Fehler
Überprüfen Sie den Namen der Datenbank im Assets-Ordner, wenn Sie wie "den Eintrag DATABASE_NAME ein.ERWEITERUNG" dann legen Sie vollen Namen in Helper-Klasse mit der Erweiterung Ihrer mein problem gelöst.
sagen wie in Vermögenswerte, die Namen von Datenbank-login.sqlite oder login.db nichts. setzen DB_NAME=login.sqlite voll mit Erweiterung.
dieses tutorial funktioniert jetzt perfekt.
Den Weg der Erstellung einer Datenbank aus dem Artikel, den du gepostet hast ist etwas diffrent von dass wie es ist getan in der android-Beispiele (ich möchte nicht sagen, ob es gut oder schlecht ist).
Habe ich gelernt, wie man Datenbanken aus SDKs Editor sample
Es ist ein gutes Beispiel ab, denn es umfasst sowohl die Erstellung der Datenbank Thema und Datenbank-Zugriff über ContentProvider (es ist wirklich der einzige gute Weg, um Daten aus db, sonst haben Sie Probleme, wenn Sie versuchen, um Daten simultaneusly von vielen stellen des Codes).
Sollten Sie beachten, dass SQLiteOpenHelper ist wirklich mächtig, und "es wird Ihnen helfen," wenn Sie es richtig verwenden. Zum Beispiel speichert die aktuelle Datenbank-version (nicht sqlite-version, aber die Nummer, die Sie assingn mit Datenbank-schema-version) und wenn Sie create new application version mit der neuen Datenbank-Struktur können Sie update-aktuelle schema, um die neue version in onUpdate.