SQL

El Lenguaje estructurado de consultas (SQL) es un lenguaje estándar utilizado en la comunicación entre una aplicación y una base de datos. El plug-in QML SQL de AppFramework ofrece herramientas para leer y escribir en bases de datos SQLite, ODBC, PostgreSQL y MySQL, así como leer archivos CSV y DBF mediante tablas virtuales SQLite.

Para obtener más ejemplos de esta funcionalidad, consulte las muestras de SQL en ArcGIS AppStudio. Para obtener más información y ejemplos, consulte nuestra publicación del blog de la Comunidad de Esri Introducción a SQL Beta en AppStudio 2.0.

Para utilizar esta funcionalidad, primero tiene que incluir la siguiente instrucción de importación:

import ArcGIS.AppFramework.Sql 1.0

Base de datos SQLite

El componente SqlDatabase es el componente central del plug-in Sql QML, que ofrece una gran selección de herramientas para crear, abrir, leer y modificar bases de datos SQL en una aplicación. La siguiente muestra de código crea una base de datos SQLite en una ubicación determinada:

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

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

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

Se puede acceder a la base de datos creada mediante otras aplicaciones desde todas las plataformas, excepto iOS. En iOS, esta base de datos se encuentra en un espacio aislado y solamente se puede acceder a ella mediante la aplicación.

Al crearla, la base de datos está vacía, pero puede rellenarla e interactuar con ella con el método query. La siguiente muestra de código sustituye al objeto component.onCompleted de la muestra de código anterior y rellena la base de datos SQLite creada con una tabla de valores:

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 su consulta es una sentencia SELECT, la primera fila pertinente se devuelve como objeto JSON de forma predeterminada. Para devolver todas las filas pertinentes, debe recorrer todas las filas de la tabla. La siguiente muestra de código devuelve todas las filas como cadenas de texto en la tabla llamada Roads:

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

Archivos CSV

Los datos de los archivos CSV se pueden consultar creando una tabla vinculada en una base de datos SQLite. Solamente los metadatos (por ejemplo, el nombre de archivo .csv) se almacenan en SQLite, mientras el contenido permanece en el archivo CSV. El archivo CSV puede ser tanto un recurso integrado de su aplicación como un archivo externo al que puede acceder mediante su aplicación. Todas las opciones admitidas por el método FileFolder de readCsvFile, a excepción de dataElementAsArray, también se admiten aquí.

La siguiente muestra de código crea una tabla vinculada a un archivo CSV preexistentes utilizando FileFolder para almacenar una ruta de archivo adecuada hasta el archivo CSV. El valor :memory: de la propiedad databaseName especifica la base de datos en memoria, en la que se guarda una lista de ciudades del mundo.

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