Große Datrenmengen fest in der App

U

Unicate

Erfahrenes Mitglied
57
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:
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.
 
MetBo schrieb:
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.

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
 
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ß ;)
 
Danke für eure Antworten!

Ich werde wohl sql nehmen.
Und wie bekomm ich das jetzt fest in die Applikation rein?
 
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
 
  • Danke
Reaktionen: Unicate
Werd's dann gleich mal ausprobieren!
 
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
 
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)
 
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?
 
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.
 
  • Danke
Reaktionen: enrem
Besten Dank, du hast mir sehr geholfen!
 
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 ;) )
 
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 ;) )

Ja das stimmt, die ist echt empfehlenswert :razz:
 
BenOtto schrieb:
- Oder man legt die Datenbank in assets/ und verschiebt sie beim ersten Start auf die SD-Karte (was ich auch am sinnvollsten finde)

Wie löscht man denn Files aus den assets?
 
Fr4gg0r schrieb:
Wie löscht man denn Files aus den assets?

Stimmt, geht ja gar nicht, weil APKs signiert werden.

Bleibt nur ein Download der Dateien oder eine 2te App für die Dateneinspeisung.
 
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:
Unicate schrieb:
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)

Ja, so kann man (im Code erzeugte) Datenbanken löschen, aber die mitgelieferte Datenbank in asset/ nicht.
 

Ähnliche Themen

M
Antworten
3
Aufrufe
146
moin
M
R
  • Robby1950
2
Antworten
23
Aufrufe
1.003
Robby1950
R
Manny87
  • Manny87
Antworten
11
Aufrufe
159
swa00
swa00
Zurück
Oben Unten