SQL

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

In questo argomento
  1. Database SQLite
  2. File CSV