Il linguaggio Structured Query Language (SQL) è un linguaggio usato per la comunicazione tra app e database. Il plug-in Sql QML di AppFramework fornisce gli strumenti per leggere e scrivere su database SQLite, ODBC, PostgreSQL, e MySQL, nonché per leggere file DBF e CSV, attraverso tabelle virtuali SQLite.
Per ulteriori esempi relativi a questa funzionalità, consultare i modelli di SQL disponibili su ArcGIS AppStudio. Per ulteriori informazioni ed esempi, consultare il post del blog di Esri Community, Introduzione a SQL Beta in AppStudio 2.0.
Per utilizzare questa funzionalità, è necessario includere prima la seguente istruzione di importazione:
import ArcGIS.AppFramework.Sql 1.0
Database SQLite
Il componente DatabaseSql è il componente centrale del plug-in Sql QML, che fornisce una vasta gamma di strumenti per la creazione, l'apertura, la lettura e la modifica di database SQL in un'app. Il seguente esempio di codice crea un database SQLite in una posizione prestabilita:
FileFolder {
id: fileFolder
path: "~/ArcGIS/Data/Sql"
}
SqlDatabase {
id: db
databaseName: fileFolder.filePath("sample.sqlite")
}
Component.onCompleted: {
fileFolder.makeFolder();
db.open();
}
Nota:
Il database creato è accessibile ad altre app su tutte le piattaforme, a eccezione di iOS. Su iOS, il database si troverà in sandbox e sarà accessibile soltanto dalla propria app.
Una volta creato, il database è vuoto, ma è possibile inserire elementi e interagire utilizzando il metodo di query. Il seguente modello di codice sostituisce l'oggetto component.onCompleted del modello di codice precedente e popola il database SQLite creato con una tabella di valori:
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')");
}
Se l'interrogazione è un'istruzione di selezione, la prima riga rilevante diventa per impostazione predefinita un oggetto JSON. Per tornare alle righe rilevanti, è necessario scorrere tutte le righe della tabella. Il seguente esempio di codice ritrasforma tutte le righe in stringhe di testo nella tabella denominata Strade:
var query = db.query("SELECT * FROM Roads");
var ok = query.first();
while (ok) {
console.log(JSON.stringify(query.values));
ok = query.next();
}
query.finish();
File CSV
È possibile interrogare i dati contenuti nei file CVS creando una tabella collegata in un database SQLite. Soltanto i metadati (ad esempio, il nome del file .csv) vengono memorizzati in SQLite, mentre i contenuti rimangono nel file CSV. Il file CSV può essere sia una risorsa incorporata dell'app, sia un file esterno a cui accedere dall'app. Tutte le opzioni supportate dal metodo di readCsvFile di FileFolder, ad eccezione di dataElementAsArray, sono supportare anche qui.
Il seguente esempio di codice crea una tabella collegata a un file CSV preesistente utilizzando FileFolder per memorizzare un percorso file valido per il file CSV. Il valore :memory: per la proprietà databaseName specifica il database presente in memoria nel quale è stato salvato un elenco delle città del mondo.
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");
}