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