Xamarin.Forms: Tutorial zu lokalen Datenbanken
Bevor Sie mit diesem Tutorial fortfahren, sollten Sie zunächst Folgendes erfolgreich abgeschlossen haben:
- Schnellstartanleitung Erstellen Ihrer ersten Xamarin.Forms-App
- Das Tutorial zu StackLayout
- Das Tutorial zu Button.
- Das Tutorial zu Entry.
- Das Tutorial zu CollectionView
In diesem Tutorial lernen Sie Folgendes:
- Verwenden des NuGet-Paket-Managers, um SQLite.NET zu einem Xamarin.Forms-Projekt hinzuzufügen.
- Erstellen der Datenzugriffsklassen
- Nutzen der Datenzugriffsklassen
Sie verwenden Visual Studio 2019 oder Visual Studio für Mac, um eine einfache Anwendung zu erstellen, die zeigt, wie Sie Daten in einer lokalen SQLite.NET-Datenbank speichern können. Die folgenden Screenshots zeigen die finale Anwendung:
Hinzufügen von SQLite.NET
Für dieses Tutorial benötigen Sie das neueste Release von Visual Studio 2019 und die Workload Mobile-Entwicklung mit .NET. Außerdem müssen Sie über einen gekoppelten Mac verfügen, um die Tutorial-App unter iOS zu kompilieren. Informationen zur Installation der Xamarin-Plattform finden Sie unter Installieren von Xamarin. Informationen zum Verbinden von Visual Studio 2019 mit einem Mac-Buildhost finden Sie unter Durchführen einer Kopplung mit einem Mac für die Xamarin.iOS-Entwicklung.
Starten Sie Visual Studio, und erstellen Sie eine neue leere Xamarin.Forms-App mit dem Namen LocalDatabaseTutorial.
Wichtig
Für die C#- und XAML-Codeausschnitte in diesem Tutorial ist es erforderlich, dass die Projektmappe LocalDatabaseTutorial genannt wird. Die Verwendung eines anderen Namens führt zu Buildfehlern, wenn Sie Code aus diesem Tutorial in die Projektmappe kopieren.
Weitere Informationen zur .NET Standard-Bibliothek, die erstellt wird, finden Sie unter Struktur einer Xamarin.Forms-Anwendung im Artikel Xamarin.Forms: Ausführliche Erläuterungen zum Schnellstart.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt LocalDatabaseTutorial und anschließend auf Manage NuGet Packages... (NuGet-Pakete verwalten...).
Klicken Sie im NuGet-Paket-Manager auf die Registerkarte Durchsuchen, suchen Sie nach dem NuGet-Paket sqlite-net-pcl, wählen Sie es aus, und klicken Sie auf die Schaltfläche Installieren, um es dem Projekt hinzuzufügen:
Hinweis
Es gibt eine Reihe von NuGet-Paketen mit ähnlichen Namen. Das richtige Paket verfügt über die folgenden Attribute:
- Ersteller: SQLite-net
- NuGet-Link: sqlite-net-pcl
Trotz des Paketnamens kann dieses NuGet-Paket in .NET Standard-Projekten verwendet werden.
Mit diesem Paket können Datenbankvorgänge in der Anwendung verwendet werden.
Wichtig
SQLite.NET ist eine Drittanbieterbibliothek, die vom praeclarum/sqlite-net-Repository unterstützt wird.
Erstellen Sie die Projektmappe, um sich zu vergewissern, dass keine Fehler vorliegen.
Erstellen von Datenzugriffsklassen
In dieser Übung fügen Sie dem Projekt LocalDatabaseTutorial Datenzugriffsklassen hinzu, mit denen Personendaten in der Datenbank gespeichert werden.
Fügen Sie im Projektmappen-Explorer dem Projekt LocalDatabaseTutorial eine neue Klasse mit dem Namen
Person
hinzu. Entfernen Sie anschließend in Person.cs den gesamten Vorlagencode, und ersetzen Sie ihn durch den folgenden:using SQLite; namespace LocalDatabaseTutorial { public class Person { [PrimaryKey, AutoIncrement] public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } } }
In diesem Codeausschnitt wird eine
Person
-Klasse definiert, die Daten zu allen Personen in der Anwendung speichert. DieID
-Eigenschaft wird mit den AttributenPrimaryKey
undAutoIncrement
markiert, um sicherzustellen, dass jedePerson
-Instanz in der Datenbank über eine eindeutige ID verfügt, die von SQLite.NET vergeben wird.Fügen Sie im Projektmappen-Explorer dem Projekt LocalDatabaseTutorial eine neue Klasse mit dem Namen
Database
hinzu. Entfernen Sie anschließend in Database.cs den gesamten Vorlagencode, und ersetzen Sie ihn durch den folgenden:using System.Collections.Generic; using System.Threading.Tasks; using SQLite; namespace LocalDatabaseTutorial { public class Database { readonly SQLiteAsyncConnection _database; public Database(string dbPath) { _database = new SQLiteAsyncConnection(dbPath); _database.CreateTableAsync<Person>().Wait(); } public Task<List<Person>> GetPeopleAsync() { return _database.Table<Person>().ToListAsync(); } public Task<int> SavePersonAsync(Person person) { return _database.InsertAsync(person); } } }
Diese Klasse enthält Code, mit dem die Datenbank erstellt wird und Daten aus ihr gelesen bzw. in sie geschrieben werden. Im Code werden asynchrone SQLite.NET-APIs verwendet, mit denen Datenbankvorgänge in Hintergrundthreads verschoben werden. Außerdem akzeptiert der
Database
-Konstruktor den Pfad der Datenbankdatei als Argument. Dieser Pfad wird in der nächsten Übung von derApp
-Klasse bereitgestellt.Erweitern Sie App.xaml im Projektmappen-Explorer im Projekt LocalDatabaseTutorial, und doppelklicken Sie dann auf die Datei App.xaml.cs, um sie zu öffnen. Entfernen Sie anschließend in App.xaml.cs den gesamten Vorlagencode, und ersetzen Sie ihn durch den folgenden:
using System; using System.IO; using Xamarin.Forms; namespace LocalDatabaseTutorial { public partial class App : Application { static Database database; public static Database Database { get { if (database == null) { database = new Database(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "people.db3")); } return database; } } public App() { InitializeComponent(); MainPage = new MainPage(); } protected override void OnStart() { // Handle when your app starts } protected override void OnSleep() { // Handle when your app sleeps } protected override void OnResume() { // Handle when your app resumes } } }
In diesem Codeausschnitt wird eine
Database
-Eigenschaft definiert, mit der eine neueDatabase
-Instanz als Singleton erstellt wird. Als Argumente für den Konstruktor derDatabase
-Klasse werden ein lokaler Dateipfad und ein Dateiname als Speicherort der Datenbank übergeben.Wichtig
Durch das Bereitstellen der Datenbank als Singleton kann eine einzelne Datenbankverbindung erstellt werden, die während der Ausführung der App offen bleibt, sodass der Aufwand für das Öffnen und Schließen der Datenbank beim Ausführen des Datenbankvorgangs vermieden wird.
Erstellen Sie die Projektmappe, um sich zu vergewissern, dass keine Fehler vorliegen.
Nutzen von Datenzugriffsklassen
In dieser Übung erstellen Sie eine Benutzeroberfläche, um die zuvor erstellten Datenzugriffsklassen zu verwenden.
Doppelklicken Sie im Projektmappen-Explorer im Projekt LocalDatabaseTutorial auf die Datei MainPage.xaml, um sie zu öffnen. Entfernen Sie dann in MainPage.xaml den gesamten Vorlagencode, und ersetzen Sie ihn durch den folgenden:
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="LocalDatabaseTutorial.MainPage"> <StackLayout Margin="20,35,20,20"> <Entry x:Name="nameEntry" Placeholder="Enter name" /> <Entry x:Name="ageEntry" Placeholder="Enter age" /> <Button Text="Add to Database" Clicked="OnButtonClicked" /> <CollectionView x:Name="collectionView"> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout> <Label Text="{Binding Name}" FontSize="Medium" /> <Label Text="{Binding Age}" TextColor="Silver" FontSize="Small" /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </StackLayout> </ContentPage>
Dieser Code definiert deklarativ die Benutzeroberfläche für die Seite, die aus zwei
Entry
-Instanzen, einemButton
-Objekt und einerCollectionView
-Klasse in einerStackLayout
-Klasse besteht. JedeEntry
-Klasse hat ihrePlaceholder
-Eigenschaft festgelegt, die den Platzhaltertext angibt, die vor der Benutzereingabe angezeigt wird. DasButton
-Objekt legt seinClicked
-Ereignis auf einen Ereignishandler namensOnButtonClicked
fest, der im nächsten Schritt erstellt wird. DieCollectionView
-Klasse legt ihreItemTemplate
-Eigenschaft auf eineDataTemplate
-Klasse fest, die eineStackLayout
-Klasse und zweiLabel
-Objekte verwendet, um die Darstellung der einzelnen Zeilen in derCollectionView
-Klasse zu definieren. DieLabel
-Objekte binden ihreText
-Eigenschaften an dieName
- undAge
-Eigenschaften des jeweiligenPerson
-Objekts.Außerdem haben die
Entry
-Instanzen und dieCollectionView
-Klasse Namen, die mit demx:Name
-Attribut angegeben werden. Dadurch kann die CodeBehind-Datei mithilfe des zugewiesenen Namens auf das Objekt zugreifen.Erweitern Sie MainPage.xaml im Projektmappen-Explorer im Projekt LocalDatabaseTutorial, und doppelklicken Sie dann auf die Datei MainPage.xaml.cs, um sie zu öffnen. Fügen Sie dann in der Datei MainPage.xaml.cs der Klasse die
OnAppearing
-Außerkraftsetzung und denOnButtonClicked
-Ereignishandler hinzu:protected override async void OnAppearing() { base.OnAppearing(); collectionView.ItemsSource = await App.Database.GetPeopleAsync(); } async void OnButtonClicked(object sender, EventArgs e) { if (!string.IsNullOrWhiteSpace(nameEntry.Text) && !string.IsNullOrWhiteSpace(ageEntry.Text)) { await App.Database.SavePersonAsync(new Person { Name = nameEntry.Text, Age = int.Parse(ageEntry.Text) }); nameEntry.Text = ageEntry.Text = string.Empty; collectionView.ItemsSource = await App.Database.GetPeopleAsync(); } }
Die
OnAppearing
-Methode befüllt dieCollectionView
-Klasse mit sämtlichen Daten, die in der Datenbank gespeichert sind. DieOnButtonClicked
-Methode, die ausgeführt wird, wenn auf dasButton
-Objekt getippt wird, speichert die eingegebenen Daten in der Datenbank, bevor beideEntry
-Instanzen gelöscht werden, und aktualisiert die Daten in derCollectionView
-Klasse.Hinweis
Die Außerkraftsetzung der
OnAppearing
-Methode wird ausgeführt, nachdem dieContentPage
-Klasse angelegt wurde, aber noch bevor sie angezeigt wird. Daher eignet sich diese Position gut, um den Inhalt von Xamarin.Forms-Ansichten festzulegen.Klicken Sie in der Symbolleiste von Visual Studio auf die Schaltfläche zum Starten (die dreieckige Schaltfläche, die einer Wiedergabetaste ähnelt), um die Anwendung im ausgewählten iOS-Remotesimulator oder Android-Emulator zu starten:
Geben Sie mehrere Datenelemente ein, und tippen Sie für jedes Datenelement auf das
Button
-Objekt. Dadurch werden die Daten in der Datenbank gespeichert, und dieCollectionView
-Klasse wieder mit allen Daten der Datenbank befüllt:Beenden Sie die Anwendung in Visual Studio.
Weitere Informationen zu lokalen Datenbanken in Xamarin.Forms finden Sie unter Lokale Xamarin.Forms-Datenbanken (Leitfaden)
Herzlichen Glückwunsch!
Glückwunsch, Sie haben das Tutorial erfolgreich abgeschlossen und Folgendes gelernt:
- Verwenden des NuGet-Paket-Managers, um SQLite.NET zu einem Xamarin.Forms-Projekt hinzuzufügen.
- Erstellen der Datenzugriffsklassen
- Nutzen der Datenzugriffsklassen
Nächste Schritte
Um mehr über die Grundlagen der Erstellung mobiler Apps mit Xamarin.Forms zu erfahren, fahren Sie mit dem Tutorial zu Webdiensten fort.
Verwandte Links
Liegt ein Problem mit diesem Abschnitt vor? Wenn ja, senden Sie uns Feedback, damit wir den Abschnitt verbessern können.