Große Datrenmengen fest in der App

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Unicate, 27.09.2010.

  1. Unicate, 27.09.2010 #1
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Hallo alle zusammen!

    Ich muss große Datenmengen speichern.
    ca. 1000+ Datensätze (bsp: alle Floristen in Deutschland mit dazugehöriger Adresse) - sei mal dahin gestellt ob das Sinn macht oder nicht.
    Hier ein Beispiel für einen DS:
    Code:
    Sven Reverb;Profiflorist;Berlin;Whateverstraße 2;01234
    
    Diese möchte ich in der Applikation benutzen können, ohne das der Benutzer den Inhalt ändern kann.
    Welche Optionen habe ich dafür?


    • XML? - Wie kann ich auf eine, in der Applikation eingebettete, xml zugreifen?
    • SQLite? - Ist das Sinnvoll wenn der Benutzer das sowieso nicht ändern kann? Wie kann ich eine solche Datenbank in eine Applikation einbetten?
    • andere optionen?
     
    Zuletzt bearbeitet: 27.09.2010
  2. MetBo, 27.09.2010 #2
    MetBo

    MetBo Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Natürlich ist xml wesentlich performanter als sql, ABER bei so einer Datenmenge bietet sich nur sql an. Solange du mit Schlüsseln arbeitet sollte die Performance trotz Datenmenge relativ gut sein.
     
  3. swordi, 27.09.2010 #3
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    xml ist wesentlich performater als sql? woher hast du das?

    ohne mir jetzt viel gedanken darüber zu machen, kann da maximal im lesezugriff sein, solange sich keine daten ändern. gibts dazu irgendwo eine quelle? würde mich interessieren
     
  4. BenOtto, 27.09.2010 #4
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Also vorkompiliertes XML (wie es aapt gerne für die Layouts, Values, u.Ä. tut) ist sicher schneller als SQLite. Aber dann kannst du auch genauso gut Konstanten definieren und die String reinschreiben. Aber bei 1000 Datensätzen muss eigentlich eine Datenbank her. Stell dir vor du willst was ändern und musst migrieren. Bei SQLite sind das 2 Klicks, bei XML... viel Spaß ;)
     
  5. Unicate, 27.09.2010 #5
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Danke für eure Antworten!

    Ich werde wohl sql nehmen.
    Und wie bekomm ich das jetzt fest in die Applikation rein?
     
  6. BenOtto, 27.09.2010 #6
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Ich würde sagen
    - du erzeugst eine Datenbank, beispielsweise mit dem Firefox Plugin SQLite Manager.
    - Dann packst du sie in eclipse in den Ordner assets/ (erstelle ihn, falls noch nicht vorhanden). Alles was in assets/ liegt wird nicht von aapt "kompiliert".
    - Über den AssetManager kommst du dann an deine Datenbank.
    - Der Rest geht mit dem Package android.database.sqlite
     
    Unicate bedankt sich.
  7. Unicate, 27.09.2010 #7
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Werd's dann gleich mal ausprobieren!
     
  8. enrem, 27.09.2010 #8
    enrem

    enrem Erfahrener Benutzer

    Beiträge:
    188
    Erhaltene Danke:
    13
    Registriert seit:
    17.01.2010
    Hallo BenOtto,

    den AssetManager kenne ich nicht. Das hört sich echt gut an. Eine Bitte! Kannst du ein kleines Beispiel posten? Geht das auch, wenn die Datenbank auf der SD-Karte liegt? Ist doch recht umständlich die Karte zu mounten und wieder frei zu geben um an die Datenbank zu gelangen.

    Ich habe es bisher so gemacht.

    Schnipsel:RM SQL SDCard ? Android-Schnipsel-Wiki


    Gruß enrem
     
  9. BenOtto, 27.09.2010 #9
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Also Android < 2.2 bietet es ja nicht an die Daten auf SD-Karte zu installieren. Dann bleiben 3 Möglichkeiten:
    - Entweder mal legt die Datenbank separat bei und lässt sie den User auf die SD-Karte ziehen (sehr umständlich)
    - Oder man Legt die Datenbank im Quelltext an (wie bei deinem Link). Dann bleibt aber der Quelltext so groß, wie er nunmal ist.
    - Oder man legt die Datenbank in assets/ und verschiebt sie beim ersten Start auf die SD-Karte (was ich auch am sinnvollsten finde)
     
  10. enrem, 27.09.2010 #10
    enrem

    enrem Erfahrener Benutzer

    Beiträge:
    188
    Erhaltene Danke:
    13
    Registriert seit:
    17.01.2010
    OK BenOtto das habe ich jetzt verstanden. Für mich kommt dann nur mittlere Version in Frage, da ich die Datenbankstruktur im Code anlegen und verwalten möchte.

    Möglicherweise hast du noch einen Tipp für mich, es ist lange her das ich in SQL was getan habe.

    1) Tabellen kann ich erzeugen
    2) Attribute anlegen geht auch.
    3) Fremdschlüssel und Autowert bekomme ich auch eingerichtet.
    4) Datensätze anlegen ändern und löschen geht auch
    5) Indizieren...

    Was mir fehlt, ist

    6) Weitere Attribute, nachdem die Tabelle erzeugt wurde und Daten enthält, hinzufügen.

    Es kommt ja vor das man die Datenbank anpassen bzw. erweitern möchte. Gibt es da was fertiges in Android oder kann ich das über eine SQL-Anweisung machen?
     
  11. BenOtto, 27.09.2010 #11
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    SQLite Query Language: ALTER TABLE

    Keine Ahnung, ob Android da was bietet, aber letztendlich wird's eh in eine SQLite-Abfrage umgesetzt. Mit ALTER TABLE lässt sich sowas einrichten.

    Du kannst die Datenbank auch im Code verwalten und trotzdem vorher anlegen.
     
    enrem bedankt sich.
  12. enrem, 27.09.2010 #12
    enrem

    enrem Erfahrener Benutzer

    Beiträge:
    188
    Erhaltene Danke:
    13
    Registriert seit:
    17.01.2010
    Besten Dank, du hast mir sehr geholfen!
     
  13. BenOtto, 27.09.2010 #13
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Bitte schön!

    Die SQLite Seite ist auch zu empfehlen um zu gucken was man alles machen kann und wie die Abfragen strukturiert sind. (Man muss nicht alles wissen, sondern wissen wo's steht ;) )
     
  14. enrem, 27.09.2010 #14
    enrem

    enrem Erfahrener Benutzer

    Beiträge:
    188
    Erhaltene Danke:
    13
    Registriert seit:
    17.01.2010
    Ja das stimmt, die ist echt empfehlenswert :razz:
     
  15. Fr4gg0r, 28.09.2010 #15
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Wie löscht man denn Files aus den assets?
     
  16. BenOtto, 28.09.2010 #16
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Stimmt, geht ja gar nicht, weil APKs signiert werden.

    Bleibt nur ein Download der Dateien oder eine 2te App für die Dateneinspeisung.
     
  17. Unicate, 28.09.2010 #17
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Hab hier ne Anleitung gefunden, die ganz gut funktioniert.
    Das Löschen geht auch (File-Objekt erstellen, if exists, file.delete())

    Wichtig ist nur das der Pfad zur Datei stimme (/data/data/...).
    Da muss übrigens der Paketname der im Manifest steht rein! Andere gehen nicht!

    Also z.B. : /data/data/de.unicate.tutorials/database/mydb.sqlite (wenn im Manifest der Paketname de.unicate.tutorials ist)
     
    Zuletzt bearbeitet: 28.09.2010
  18. BenOtto, 28.09.2010 #18
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Ja, so kann man (im Code erzeugte) Datenbanken löschen, aber die mitgelieferte Datenbank in asset/ nicht.
     

Diese Seite empfehlen