Vorgefertigte SQLite-Datenbank verwenden?

  • Antworten:15
  • Bentwortet
Bage Duzo
  • Forum-Beiträge: 13

11.03.2013, 21:47:05 via Website

Einen schönen Tag liebe Mitdevloper, :)

ich bin im Besitz einer Datenbank mit knapp 5000 Einträgen, welche ich nun in meine App einbinden möchte. Dummerweise kenne ich nur die Möglichkeit, eine Datenbank beim Start erstellen zu lassen. Das mag vielleicht für kleinere Datenansammlungen genügen, doch bei meiner Menge ist das aus meiner Sicht unsinnig.

Gibt es die Möglichkeit, dass eine bereits zuvor erstellte Datenbank irgendwo ihren Platz findet, auf die ich dann zugreifen kann?
Ich würde mich sehr um ein paar Antworten freuen.

Viele Grüße

Antworten
Timo D.
  • Forum-Beiträge: 182

11.03.2013, 21:57:29 via Website

Das könnte dir helfen:
http://stackoverflow.com/questions/6540906/android-simple-export-import-of-sqlite-database
Es soll doch eine Datenbank importiert werden?

Sichern Sie Ihr Smartphone gegen Diebstahl und erhöhen Sie die Chance, es wiederzufinden. Jetzt neu: Guardian - Anti-Diebstahl Guardian - Anti-Diebstahl Pro https://play.google.com/store/apps/details?id=de.tapps.guardian.pro Guardian - Anti-Diebstahl Trial https://play.google.com/store/apps/details?id=de.tapps.guardian.free

Bage Duzo

Antworten
Bage Duzo
  • Forum-Beiträge: 13

11.03.2013, 22:10:08 via Website

Danke für die schnelle Antwort. :D

Nur geht es mir darum, eine fertige Datenbank mit allen Inhalten schon in der App auszuliefern. Im Beispiel befindet sich die Datenbank aber schon erstellt im "/data/data/{package_name}/databases" Ordner und ich bekomme sie bisher nur durch das Code-basierte Erstellen dorthin. (Also mit dem openOrCreateDatabase). Ich möchte meine vorgefertigte Datenbank am besten irgendwo in der APK haben und gleich darauf zugreifen können.

Antworten
impjor
  • Forum-Beiträge: 1.793

11.03.2013, 22:14:23 via App

Das Problem wird sein, dass wenn du eine Datei in der apk mitliefert, diese nicht mehr bearbeitet werden kann. Also nur lese- Zugriffe.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Bage Duzo

Antworten
Timo D.
  • Forum-Beiträge: 182

11.03.2013, 22:15:45 via Website

Ich habe Ewigkeiten nicht mehr mit Datenbankdateien gearbeitet. Gibt es nicht eine Datei, wo das alles drin gespeichert ist? Man kann ja auch in MySQL eine SQL Datei erstellen, die man dann importieren kann. Das müsste doch in SQL Lite auch gehen. Dann einfach die Datei in den Projektordner stecken und von dort auslesen

— geändert am 11.03.2013, 22:16:02

Sichern Sie Ihr Smartphone gegen Diebstahl und erhöhen Sie die Chance, es wiederzufinden. Jetzt neu: Guardian - Anti-Diebstahl Guardian - Anti-Diebstahl Pro https://play.google.com/store/apps/details?id=de.tapps.guardian.pro Guardian - Anti-Diebstahl Trial https://play.google.com/store/apps/details?id=de.tapps.guardian.free

Bage Duzo

Antworten
Bage Duzo
  • Forum-Beiträge: 13

11.03.2013, 22:21:15 via Website

Ja, das ist das Problem, das ich dabei sehe. Aber es muss doch eine verbreitete Methode geben, wie man damit fertig wird. Ich meine, es gibt zahlreiche Apps, die auf unzählige Daten zugreifen. Siehe die ganzen Offline-Wörterbücher, etc... Ich bin mir sicher, dass die Programmierer eine klügere Idee hatten. Nur würde ich gerne von dieser Idee auch erfahren. :(

Antworten
Timo D.
  • Forum-Beiträge: 182

11.03.2013, 22:26:28 via Website

Ganz simpel: Du machst einen Download-Client. Du lädst die Datei auf einen Server und z.B. eine txt Datei mit Versionsnummer. Dann speicherst du im Handy z.B. unter sharedPreferences die aktuelle Version. Prüfst immer, ob die Versionsnummer aktuell isst und wenn nicht, wird die neue Datenbank heruntergeladen und auf dem Handy unter einem bestimmten Pfad gespeichert und daraus aus der App zugegriffen.

Voraussetzung ist natürlich eine Internetverbindung.

Sichern Sie Ihr Smartphone gegen Diebstahl und erhöhen Sie die Chance, es wiederzufinden. Jetzt neu: Guardian - Anti-Diebstahl Guardian - Anti-Diebstahl Pro https://play.google.com/store/apps/details?id=de.tapps.guardian.pro Guardian - Anti-Diebstahl Trial https://play.google.com/store/apps/details?id=de.tapps.guardian.free

Bage Duzo

Antworten
Bage Duzo
  • Forum-Beiträge: 13

11.03.2013, 22:30:43 via Website

impjor
Wie wäes mit aus dem inet downloaden und dann auf der sd karte speichern

Ja, das ist eine gute Alternativlösung. :) Nur müsste ich den Nutzer dadurch mit einem Download belästigen, was ich sehr ungerne machen würde. Aber wie gesagt: Es ist eine gute Alternative, wenn ich keine andere Lösung finden sollte.

Antworten
Timo D.
  • Forum-Beiträge: 182

11.03.2013, 22:33:39 via Website

Was ist denn das Problem am normalen Import? Du machst den nur beim ersten Systemstart. Danach sollten die Einträge doch an die App gebunden sein und können verwendet werden. Ich verstehe das Problem nicht. Die SQL Datei darf natürlich nicht bei jedem Neustart neu importiert werden.

Sichern Sie Ihr Smartphone gegen Diebstahl und erhöhen Sie die Chance, es wiederzufinden. Jetzt neu: Guardian - Anti-Diebstahl Guardian - Anti-Diebstahl Pro https://play.google.com/store/apps/details?id=de.tapps.guardian.pro Guardian - Anti-Diebstahl Trial https://play.google.com/store/apps/details?id=de.tapps.guardian.free

Bage Duzo

Antworten
Bage Duzo
  • Forum-Beiträge: 13

11.03.2013, 22:38:13 via Website

Timo D.
Ganz simpel: Du machst einen Download-Client. Du lädst die Datei auf einen Server und z.B. eine txt Datei mit Versionsnummer. Dann speicherst du im Handy z.B. unter sharedPreferences die aktuelle Version. Prüfst immer, ob die Versionsnummer aktuell isst und wenn nicht, wird die neue Datenbank heruntergeladen und auf dem Handy unter einem bestimmten Pfad gespeichert und daraus aus der App zugegriffen.

Voraussetzung ist natürlich eine Internetverbindung.

Mhm, ich sollte mir die Sache wirklich einmal genauer ansehen. :) Es ist zwar wirklich etwas, das ich nur sehr ungern mache, doch wenn ich keine andere Lösung finde... :(

Jedenfalls sollten keine Gebühren für den Server anfallen. Kennen Sie denn gute Server, die einen durch ihre Werbung nicht ganz so sehr die Freude erdrücken?

Antworten
Timo D.
  • Forum-Beiträge: 182

11.03.2013, 22:40:26 via Website

Die Werbung sollte nicht stören, da es ein reiner Dateispeicher sein sollte. Allerdings ist dieses nicht bei allen Anbietern gern gesehen. Ich nutze eine kostenpflichtigen, aber sehr guten und leistungsfähigen Anbieter.

Sichern Sie Ihr Smartphone gegen Diebstahl und erhöhen Sie die Chance, es wiederzufinden. Jetzt neu: Guardian - Anti-Diebstahl Guardian - Anti-Diebstahl Pro https://play.google.com/store/apps/details?id=de.tapps.guardian.pro Guardian - Anti-Diebstahl Trial https://play.google.com/store/apps/details?id=de.tapps.guardian.free

Bage Duzo

Antworten
Bage Duzo
  • Forum-Beiträge: 13

11.03.2013, 22:45:26 via Website

Timo D.
Was ist denn das Problem am normalen Import? Du machst den nur beim ersten Systemstart. Danach sollten die Einträge doch an die App gebunden sein und können verwendet werden. Ich verstehe das Problem nicht. Die SQL Datei darf natürlich nicht bei jedem Neustart neu importiert werden.

Meinen Sie mit "normaler Import" das Erstellen und Eintragen auf Code-Ebene? Es gibt nämlich das Problem, dass ich die Daten nur als SQLite-Datenbank habe. Ich kann nur schlecht diese ganze Datenmenge als einen Code schreiben, der sich dann beim Erststart eintragen lässt.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

11.03.2013, 23:48:59 via Website

Wenn du die DB partout nicht beim ersten Start herunterladen willst, dann könntest du sie stattdessen in den assets speichern und beim ersten Start auf den USB-Speicher umkopieren.
Die andere Möglichkeit wäre ein SQL-Dump, den du beim ersten Start in eine neu erstellte DB importierst, das dauert aber wahrscheinlich erheblich länger als das Umkopieren.

In meinen Projekten mache ich es durchgehend so das die DB heruntergeladen wird, wenn die App nicht mit einer leeren DB arbeiten kann;
Gründe sind neben der Tatsache das ich dabei "etwas" mehr als 5000 Datensätze zu handhaben habe u.a. der offensichtliche Punkt, das Import/Umkopieren dazu führt, das die DB am Ende zwei mal Platz auf dem Gerät verbraucht.

Richard R.Bage Duzo

Antworten
Richard R.
  • Forum-Beiträge: 90

14.03.2013, 21:39:36 via Website

Bage Duzo
Meinen Sie mit "normaler Import" das Erstellen und Eintragen auf Code-Ebene? Es gibt nämlich das Problem, dass ich die Daten nur als SQLite-Datenbank habe. Ich kann nur schlecht diese ganze Datenmenge als einen Code schreiben, der sich dann beim Erststart eintragen lässt.

Warum ist das ein Problem? Zum Befüllen der Datenbank musst du ja Import-Anweisungen erstellt haben. Die kannst du genauso gut in einem sql-File der App mitgeben und dann beim Erstart auslesen und so die DB befüllen.

Ich will nix unterstellen, aber für mich klingen die Formulierungen "ich bin im Besitz einer Datenbank mit knapp 5000 Einträgen," (aus deinem ersten Post) und "ich habe die Daten nur als SQLite-Datenbank" reichlich fragwürdig. Wo hast du denn die Datenbank her?

Antworten
Bage Duzo
  • Forum-Beiträge: 13

15.03.2013, 19:59:44 via Website

Richard R.
Bage Duzo
Meinen Sie mit "normaler Import" das Erstellen und Eintragen auf Code-Ebene? Es gibt nämlich das Problem, dass ich die Daten nur als SQLite-Datenbank habe. Ich kann nur schlecht diese ganze Datenmenge als einen Code schreiben, der sich dann beim Erststart eintragen lässt.

Warum ist das ein Problem? Zum Befüllen der Datenbank musst du ja Import-Anweisungen erstellt haben. Die kannst du genauso gut in einem sql-File der App mitgeben und dann beim Erstart auslesen und so die DB befüllen.

Ich will nix unterstellen, aber für mich klingen die Formulierungen "ich bin im Besitz einer Datenbank mit knapp 5000 Einträgen," (aus deinem ersten Post) und "ich habe die Daten nur als SQLite-Datenbank" reichlich fragwürdig. Wo hast du denn die Datenbank her?

Vor einigen Monaten habe ich mit einigen Kollegen ein Programm geschrieben, das einen Text in vielen verschiedenen Arten unter die Lupe nimmt. Eine Art davon ist das Untersuchen der Häufigkeit der verwendeten Wörter. Dazu nahmen wir eine enorm große Anzahl von Texten aus allen Bereichen und heraus kam eine Datenbank mit knapp 5000 nach Häufigkeit sortierten Wörtern. (Die anderen haben wir weggestrichen). Wieso nur noch eine SQLite übrig geblieben ist, kann ich nicht erklären. (Vor allem weil wir doch mit Excel gearbeitet haben. :D )

Ich habe nun auch das Problem gelöst. Nach vielen Stunden voller Recherchen schaffte ich es doch noch, die Datenbank aus dem Assets einfach zu kopieren. :D

Trotzdem bedanke ich mich für die Hilfe aller hier. :D

Antworten