Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das beispiel DataAccess_Adv zeigt eine funktionierende Anwendung, die Benutzereingaben und CRUD-Datenbankfunktionen (Erstellen, Lesen, Aktualisieren und Löschen) ermöglicht. Die Anwendung besteht aus zwei Bildschirmen: einer Liste und einem Dateneingabeformular. Der gesamte Datenzugriffscode kann in iOS und Android ohne Änderungen wiederverwendbar sein.
Nach dem Hinzufügen einiger Daten sehen die Anwendungsbildschirme unter Android wie folgt aus:
Das Android-Projekt wird unten gezeigt– der in diesem Abschnitt gezeigte Code ist im Verzeichnis Orm enthalten:
Der native UI-Code für die Aktivitäten in Android liegt außerhalb des Gültigkeitsbereichs dieses Dokuments. Weitere Informationen zu den Ui-Steuerelementen finden Sie im Leitfaden zu Android ListViews und Adaptern .
Lesen
Das Beispiel enthält mehrere Lesevorgänge:
- Lesen der Liste
- Lesen einzelner Datensätze
Die beiden Methoden in der StockDatabase
-Klasse sind:
public IEnumerable<Stock> GetStocks ()
{
lock (locker) {
return (from i in Table<Stock> () select i).ToList ();
}
}
public Stock GetStock (int id)
{
lock (locker) {
return Table<Stock>().FirstOrDefault(x => x.Id == id);
}
}
Android rendert die Daten als ListView
.
Erstellen und Aktualisieren
Um den Anwendungscode zu vereinfachen, wird eine einzelne Speichermethode bereitgestellt, die ein Insert- oder Update-Objekt ausführt, je nachdem, ob der PrimaryKey festgelegt wurde. Da die Id
Eigenschaft mit einem [PrimaryKey]
-Attribut gekennzeichnet ist, sollten Sie sie nicht im Code festlegen. Diese Methode erkennt, ob der Wert zuvor gespeichert wurde (durch Überprüfen der Primärschlüsseleigenschaft) und fügt das Objekt entsprechend ein oder aktualisiert es:
public int SaveStock (Stock item)
{
lock (locker) {
if (item.Id != 0) {
Update (item);
return item.Id;
} else {
return Insert (item);
}
}
}
Reale Anwendungen erfordern in der Regel eine überprüfung (z. B. erforderliche Felder, Mindestlängen oder andere Geschäftsregeln). Gute plattformübergreifende Anwendungen implementieren so viel logische Validierung wie möglich in freigegebenem Code und übergeben Validierungsfehler zur Anzeige gemäß den Funktionen der Plattform an die Benutzeroberfläche.
Löschen
Im Gegensatz zu den Insert
Methoden und Update
kann die Delete<T>
-Methode nur den Primärschlüsselwert und nicht ein vollständiges Stock
-Objekt akzeptieren. In diesem Beispiel wird ein Stock
-Objekt an die -Methode übergeben, aber nur die Id-Eigenschaft wird an die Delete<T>
-Methode übergeben.
public int DeleteStock(Stock stock)
{
lock (locker) {
return Delete<Stock> (stock.Id);
}
}
Verwenden einer vorab aufgefüllten SQLite-Datenbankdatei
Einige Anwendungen werden mit einer Datenbank ausgeliefert, die bereits mit Daten aufgefüllt ist. Sie können dies ganz einfach in Ihrer mobilen Anwendung erreichen, indem Sie eine vorhandene SQLite-Datenbankdatei mit Ihrer App senden und in ein schreibbares Verzeichnis kopieren, bevor Sie darauf zugreifen. Da SQLite ein Standarddateiformat ist, das auf vielen Plattformen verwendet wird, stehen eine Reihe von Tools zum Erstellen einer SQLite-Datenbankdatei zur Verfügung:
SQLite Manager Firefox-Erweiterung – Funktioniert unter Mac und Windows und erzeugt Dateien, die mit iOS und Android kompatibel sind.
Befehlszeile : Siehe www.sqlite.org/sqlite.html .
Achten Sie beim Erstellen einer Datenbankdatei für die Verteilung mit Ihrer App auf die Benennung von Tabellen und Spalten, um sicherzustellen, dass sie den Erwartungen Ihres Codes entsprechen, insbesondere wenn Sie SQLite.NET verwenden, der erwartet, dass die Namen Ihren C#-Klassen und -Eigenschaften (oder den zugeordneten benutzerdefinierten Attributen) entsprechen.
Um sicherzustellen, dass code vor allem in Ihrer Android-App ausgeführt wird, können Sie ihn in der ersten zu ladenden Aktivität platzieren, oder Sie können eine Application
Unterklasse erstellen, die vor aktivitäten geladen wird. Der folgende Code zeigt eine Application
Unterklasse, die eine vorhandene Datenbankdatei data.sqlite aus dem Verzeichnis /Resources/Raw/ kopiert.
[Application]
public class YourAndroidApp : Application {
public override void OnCreate ()
{
base.OnCreate ();
var docFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
Console.WriteLine ("Data path:" + Database.DatabaseFilePath);
var dbFile = Path.Combine(docFolder, "data.sqlite"); // FILE NAME TO USE WHEN COPIED
if (!System.IO.File.Exists(dbFile)) {
var s = Resources.OpenRawResource(Resource.Raw.data); // DATA FILE RESOURCE ID
FileStream writeStream = new FileStream(dbFile, FileMode.OpenOrCreate, FileAccess.Write);
ReadWriteStream(s, writeStream);
}
}
// readStream is the stream you need to read
// writeStream is the stream you want to write to
private void ReadWriteStream(Stream readStream, Stream writeStream)
{
int Length = 256;
Byte[] buffer = new Byte[Length];
int bytesRead = readStream.Read(buffer, 0, Length);
// write the required bytes
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = readStream.Read(buffer, 0, Length);
}
readStream.Close();
writeStream.Close();
}
}