SQL

Le langage SQL (Structured Query Language) est un langage normalisé permettant la communication entre une application et une base de données. Le plug-in Sql QML AppFramework fournit des outils pour lire et écrire vers les bases de données SQLite, ODBC, PostgreSQL et MySQL, ainsi que pour lire des fichiers DBF et CSV, via les tables virtuelles SQLite.

Pour plus d’exemples de cette fonctionnalité, consultez les exemples SQL dans ArcGIS AppStudio Pour plus d’informations et des exemples, reportez-vous au billet de blog de la communauté Esri intitulé Introduction to SQL Beta in AppStudio 2.0.

Pour utiliser cette fonction, vous devez tout d’abord inclure l’instruction d’import suivante :

import ArcGIS.AppFramework.Sql 1.0

Base de données SQLite

Le composant SqlDatabase est le composant central du plug-in Sql QML, qui fournit une grande palette d’outils pour créer, ouvrir, lire, et modifier des bases de données SQL dans une application. L’exemple de code suivant crée une base de données SQLite à un emplacement défini :

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

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

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

Il est possible d’accéder à la base de données créée depuis d’autres applications sur toutes les plateformes à l’exception d’iOS. Sur iOS, cette base de données sera en mode sandbox et uniquement accessible via votre application.

Lorsqu’elle est créée, cette base de données est vide, mais vous pouvez la remplir et interagir avec elle à l’aide de la méthode query (requête). L’exemple de code suivant remplace l’objet component.onCompleted dans l’exemple de code précédent et renseigne la base de données SQLite créée avec une table de valeurs :

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

Si votre requête est une instruction Select, la première ligne pertinente est renvoyée en tant qu’objet JSON par défaut. Pour renvoyer toutes les lignes pertinentes, vous devez effectuer une boucle à travers toutes les lignes de la table. L’exemple de code suivant renvoie sous forme de chaînes de texte toutes les lignes dans la table appelées Routes :

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

fichier CSV

Les données des fichiers CSV peuvent être interrogées en créant une table liée dans une base de données SQLite. Seules les métadonnées (par exemple, le nom de fichier .csv) sont stockées dans SQLite, le contenu restant dans le fichier CSV. Le fichier CSV peut être soit une ressource incorporée de votre application soit un fichier externe auquel votre application peut accéder. Toutes les options prises en charge par la méthode FileFolder readCsvFile, à l’exception de dataElementAsArray, sont également prises en charge ici.

L’exemple de code suivant crée une table liée à un fichier CSV préexistant à l'aide de FileFolder (répertoire de fichiers) pour stocker un chemin d’accès approprié au fichier CSV. La valeur :memory: (mémoire) de la propriété databaseName (base de données) spécifie la base de données en mémoire, dans laquelle est enregistrée une liste des villes du monde.

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