SQL

Strukturalny język zapytań (SQL, Structured Query Language) to standardowy język używany do komunikacji między aplikacją i bazą danych. Wtyczka Sql QML modułu AppFramework udostępnia narzędzia do odczytywania baz danych SQLite, ODBC, PostgreSQL i MySQL, zapisywania w nich, a także do odczytywania plików DBF i CSV za pośrednictwem wirtualnych tabel SQLite.

Dalsze rozwiązania związane z tą funkcjonalnością można znaleźć w przykładach kodu SQL zawartych w aplikacji ArcGIS AppStudio. Więcej informacji i przykłady można znaleźć we wpisie na blogu Esri Community: Wprowadzenie do SQL Beta w aplikacji AppStudio 2.0.

Aby korzystać z tej funkcjonalności, należy najpierw dołączyć poniższą instrukcję importu:

import ArcGIS.AppFramework.Sql 1.0

Baza danych SQLite

Komponent SqlDatabase jest centralnym komponentem wtyczki Sql QML udostępniającym szeroki zestaw narzędzi do tworzenia, otwierania, odczytywania i modyfikowania baz danych SQL w aplikacji. Poniższy przykładowy kod tworzy bazę danych SQLite w wybranej lokalizacji:

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

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

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

Do utworzonej bazy danych mogą mieć dostęp inne aplikacje na wszystkich platformach z wyjątkiem platformy iOS. Na platformie iOS ta baza danych jest umieszczana w piaskownicy (sandboxed) i jest dostępna tylko z poziomu aplikacji użytkownika.

Baza danych po utworzeniu jest pusta, ale można ją zapełniać i pracować z nią, używając metody query. Poniższy przykładowy kod zastępuje obiekt component.onCompleted z poprzedniego przykładowego kodu i zapełnia utworzoną bazę danych SQLite tabelą wartości:

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')");
}

Jeśli tworzone zapytanie jest instrukcją typu select, pierwszy odpowiadający wiersz jest domyślnie zwracany w postaci obiektu JSON. Aby zwrócone zostały wszystkie odpowiadające wiersze, należy wykonać pętlę na wszystkich wierszach tabeli. Poniższy przykładowy kod zwraca wszystkie wiersze w postaci ciągu znakowego w tabeli o nazwie Drogi:

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

pliki CSV

Dane w plikach CSV mogą być poddawane zapytaniom przez utworzenie powiązanej tabeli w bazie danych SQLite. Tylko metadane (na przykład nazwa pliku .csv) są przechowywane w bazie danych SQLite, natomiast zawartość jest przechowywana w pliku CSV. Plik CSV może być osadzonym zasobem aplikacji użytkownika, może też być zewnętrznym plikiem dostępnym z poziomu aplikacji. Wszystkie opcje obsługiwane przez metodę FileFolder readCsvFile, z wyjątkiem dataElementAsArray, są obsługiwane także tutaj.

Poniższy przykładowy kod tworzy tabelę powiązaną z istniejącym wcześniej plikiem CSV, używając parametru FileFolder do przechowania odpowiedniej ścieżki do pliku CSV. Wartość :memory: właściwości databaseName określa znajdującą się w pamięci bazę danych, w której jest zapisana lista miast świata.

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");
}