Wie baut man in eine Windows 8 App eine Datenbank ein?

Ich hab ein paar interessante Ideen für Windows 8 Apps. Das Problem ist aber, dass alle Ideen darauf basieren, dass die Windows 8 Apps eine Datenhaltung haben, d.h. irgendwie müssen diese Apps die Daten die mit ihnen verwaltet werden auch speichern. Natürlich könnte man da mal eben selbst was bauen (z.B. Persistieren von C#-Objekte auf Platte in Textdateien oder so); aber mal ehrlich – das ist sicherlich heutzutage nicht unbedingt „State-Of-The-Art“ zumal eine meiner Ideen ein etwas komplexeres Datenmodell (zumindest gibt es ein paar Tabellen mit ein paar Beziehungen) voraussetzt.

Grundsätzlich ist es so, dass Datenbanken wie die localDB (wahrscheinlich erstmal) nicht unter WinRT unterstützt werden und daher momentan für meine Projekte nicht in Frage kommen. Prinzipiell gibt es wohl die folgenden Möglichkeiten (habe ich in dem Post hier gefunden):

Ich habe mir überlegt, dass ich einmal den Ansatz über SQLite weiterverfolgen möchte, zumal es im Internet schon einige Tutorials gibt, wie man eine Datenbank mit SQLite in eine Windows New UI App einbauen kann. Zunächst habe ich diesen Artikel (mit Video) hier gefunden, der erklärt hat wie man die SQLite Datenbank für Windows RT selbst zusammenbaut. Das ist recht komplex und man braucht einiges an Tools (und ehrlichgesagt hat es bei mir nicht gelappt ;)). Dann habe ich aber diesen Artikelhier gefunden, bei dem erklärt wird wie man die vorcompilierte SQLite für Windows Runtime runterlädt, in ein Windows 8 Projekt einbaut und dann damit arbeitet. Und genau das möchte ich hier mal erklären wie das geht. Also – zunächst muss man sich SQLite für Windows RT im Extension-Manager runterladen:

Bild017

Die Installation lief bei mir sehr problemlos durch.

Bild018

Danach muss Visual Studio erstmal neu gestartet werden:

Bild019

Nach dem Neustart von Visual Studio kann man nun einfach mal ein neues Windows 8 Projekt erstellen.

Bild020

Damit man SQLite jetzt verwenden kann muss man nun sowohl SQLite für Windows Runtime und Microsoft Visual C++ Runtime Package als Verweis in das Projekt aufnehmen

Bild021

Damit ist SQLite im Projekt verfügbar. Damit man das noch besser programmieren kann sollte man nun noch einen SQLite Wrapper verwenden. Hier gibt es beispielsweise die sqlite-net library, die man hierfindet. Damit man die sqlite-net Bibliothek runterladen kann benötigt man nuget. Nuget gibt es zum Glück auch über den Extension Manager in Visual Studio, also laden wir uns das mal flugs herunter, bzw. bei mir war es schon installiert, also musste hier nix weiter gemacht werden.

Bild022

Nachdem der NuGet Package-Manager nun auf dem System drauf ist muss man die Package Manager Console starten um sich die Bibliothek aus dem Netz zu holen:

Bild023

In die Konsole muss man dann Install-Package sqlite-net eingeben, dann holt sich nuget den Kram aus dem Internet und installiert das alles:

 

Bild024

So, nachdem das soweit eingebaut ist kann man jetzt damit anfangen Code zu schreiben. Ich habe als Beispielprogramm einfach mal das Template „Raster-App (XMLA)“ gewählt. Wichtig ist, dass man im Projekt die Zielplattform einstellt. Wählt man „Any CPU“ aus compiliert das Ganze nicht.

Bild025

 

Ich hab mich für x86 entschieden, dann muss meine App nicht im Simulator ausgeführt werden. Eine Ausführung im Simulator geht aber natürlich auch.

Das erste was wir ausprobieren müssen ist, wie wir Daten in die SQLite-Datenbank bekommen. Hierzu müssen wir erst einmal eine Klasse schreiben, die Daten enthalten soll und die dann später einmal unsere Tabelle in SQLite werden soll. Ich hab mich für eine ganz tolle Personen-Klasse entschieden:

Bild026

 

So weit so einfach: Die Klasse hat drei Felder, die Felder ID, Vorname und Nachname. Ich habe SQLite als Namespace eingebunden und kann dann in meiner Klasse Code-Annotationen von SQLite nutzen und so habe ich das Feld ID als AutoIncrement und PrimaryKey-Feld ausgezeichnet.

Damit das Ganze auch seine Ordnung hat, habe ich die Klassendatei für Person im Ordner DataModel angelegt, weil dieser Ordner ja das Datenmodell unserer Anwendung darstellt.

Nun können wir anfangen die Datenbank zu verwenden. Dazu gehe ich in den Code von GroupedItemPages.xaml und schreibe dort einfach mal eine Methode LoadData, die ein paar Testdaten in meine SQLite-Datenbank lädt:

Bild027

So, was passiert in diesem Code. Also zunächst einmal lege in der Variablen dbPath fest wo die SQLite-Datenbank gespeichert werden soll. In meinem Fall will ich die im Verzeichnis der aktuellen App (dazu unten mehr) speichern, d.h. ich gehe in Windows.Storage.ApplicationData.Current.LocalFolder.Path und spreche dort eine Datei mit Namen db.sqlite an. Gibt es diese Datei (bzw. diese Datenbank) noch nicht, so wird sie angelegt. Als nächstes erzeuge ich in der Variablen db eine Verbindung zu meiner Datenbank. Dann erzeuge ich in der Datenbank eine Tabelle aus der Klasse Person. Wichtig ist hier übrigens, dass man das Namespace Datenbanktest.DataModel einbindet, damit die Klasse Person auch gefunden wird.

Bild028

In der Schleife erzeuge ich dann mal ein paar „Personen“. Damit das auch vernünftig abläuft lasse ich das Ganze als Lambda-Ausdruck innerhalb einer Transaktion laufen.

Nun ist es an der Zeit unsere hervorragende App einmal zu starten. Optisch gibt es da nicht viel zu sehen, aber im Hintergrund tut sich eine ganze Menge. Wenn wir in das Verzeichnis LocalState unserer App gehen können wir sehen, dass dort offensichtlich schon mal eine Datenbank-Datei angelegt worden ist:

Bild029

Da kann man so natürlich nicht reingucken. Als erster Test was überhaupt so passiert ist besorge ich ein Programm aus dem Internet mit dem man SQLite-Datenbanken verwalten kann. Ich habe mich fürsqliteadmin entschieden.

Wenn man das Programm startet und dann die Datei öffnet die unsere Windows 8 App angelegt hat, dann sieht man Folgendes:

Bild030

Daten in die Datenbank schreiben geht offensichtlich schon einmal. Das ist ja schon mal ein netter Erfolg. Als nächsten Schritt, der in einem separaten Blog-Artikel behandelt wird, müssen wir diese Daten natürlich noch an die Oberfläche der Windows 8 App binden.

Die Dokumentation zu SQLite gibt es hier.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

%d Bloggern gefällt das: