SQL

Structured Query Language (SQL) ist eine Standardsprache, die für die Kommunikation zwischen einer App und einer Datenbank genutzt wird. Das SQL QML-Plug-in von AppFramework bietet Werkzeuge zum Lesen von und Schreiben in SQLite-, ODBC-, PostgreSQL- und MySQL-Datenbanken und zum Lesen von DBF- und CSV-Dateien über virtuelle SQLite-Tabellen.

Weitere Beispiele dieser Funktionalität finden Sie in den SQL-Beispielen von ArcGIS AppStudio. Weitere Informationen und Beispiele finden Sie im Esri Community-Blogbeitrag Introduction to SQL Beta in AppStudio 2.0.

Um diese Funktionalität nutzen zu können, müssen Sie zunächst die folgende Import-Anweisung einbeziehen:

import ArcGIS.AppFramework.Sql 1.0

SQLite-Datenbank

Die SqlDatabase-Komponente ist die zentrale Komponente des SQL QML-Plug-ins, die eine große Auswahl von Werkzeugen zum Erstellen, Öffnen, Lesen und Ändern von SQL-Datenbanken in einer App bietet. Mit dem folgenden Codebeispiel wird eine SQLite-Datenbank an einem festgelegten Speicherort festgelegt:

FileFolder {
  id: fileFolder
  path: "~/ArcGIS/Data/Sql"
}

SqlDatabase {
  id: db
  databaseName: fileFolder.filePath("sample.sqlite")
}

Component.onCompleted: {
  fileFolder.makeFolder();
  db.open();
}
Hinweis:

Die erstellte Datenbank kann von anderen Apps auf allen Plattformen, ausgenommen iOS, aufgerufen werden. Unter iOS wird diese Datenbank als Sandbox bereitgestellt, auf die nur Ihre App zugreifen kann.

Diese Datenbank ist zum Zeitpunkt der Erstellung leer, Sie können sie jedoch füllen und mithilfe der query-Methode mit ihr interagieren. Mit dem folgenden Codebeispiel wird das Objekt component.onCompleted im vorherigen Codebeispiel ersetzt und die erstellte SQLite-Datenbank mit einer Wertetabelle gefüllt:

Component.onCompleted: {
    fileFolder.makeFolder();
    db.open();
    db.query("CREATE TABLE world_cities (name TEXT,subcountry TEXT, country TEXT)");
    db.query("INSERT INTO world_cities VALUES ('Melbourne', 'Victoria', 'Australia')");
    db.query("INSERT INTO world_cities VALUES ('Redlands', 'California', 'United States')");
}

Wenn es sich bei Ihrer Abfrage um eine Auswahlanweisung handelt, wird die erste relevante Zeile standardmäßig als JSON-Objekt zurückgegeben. Um alle relevanten Zeilen zurückzugeben, müssen alle Zeilen der Tabelle in einer Schleife durchlaufen werden. Mit dem folgenden Codebeispiel werden alle Zeilen als Textzeichenfolgen in der Tabelle namens "Roads" zurückgegeben:

var query = db.query("SELECT * FROM Roads");
var ok = query.first();
while (ok) {
  console.log(JSON.stringify(query.values));
  ok = query.next();
}
query.finish();

CSV-Dateien

Daten in CSV-Dateien können durch die Erstellung einer verknüpften Tabelle in einer SQLite-Datenbank abgefragt werden. Es werden ausschließlich die Metadaten (z. B. der .csv-Dateiname) in SQLite gespeichert, wobei der Inhalt in der CSV-Datei verbleibt. Die CSV-Datei kann eine eingebettete Ressource Ihrer App oder eine externe Datei sein, auf die Ihre App zugreifen kann. Unterstützung besteht hier für alle Optionen, die von der FileFolder-Methode readCsvFile unterstützt werden, mit Ausnahme von dataElementAsArray.

Mit dem folgenden Beispielcode wird mittels FileFolder eine Tabelle mit einer bereits vorhandenen CSV-Datei verknüpft, um einen geeigneten Dateipfad zu der CSV-Datei zu speichern. Der :memory:-Wert für die Eigenschaft databaseName gibt die In-Memory-Datenbank an, in der eine Liste der Städte der Erde gespeichert ist.

SqlDatabase {
    id: db
    databaseName: ":memory:"
}

FileFolder {
    id: dataFolder
    url: "data"
}

Component.onCompleted: {
    var csvFilePath = dataFolder.filePath("world-cities.csv");
    db.open();
    db.query("CREATE VIRTUAL TABLE world_cities USING CSV(filepath=%1,ignoreInvalidLines=%2,valueType=%3)".arg(csvFilePath).arg("false").arg("text");
}

In diesem Thema
  1. SQLite-Datenbank
  2. CSV-Dateien