SQL

Idioma de Consulta Estruturado (SQL) é um idioma padrão que é utilizado para comunicação entre um aplicativo e um banco de dados. O complemento AppFramework Sql QML fornece ferramentas para ler e escrever em bancos de dados SQLite, ODBC, PostgreSQL e MySQL, como também, para ler arquivos DBF e CSV, através de tabelas virtuais de SQLite.

Para obter mais exemplos desta funcionalidade, consulte as amostras de SQL no ArcGIS AppStudio. Para obter mais informações e exemplos, consulte nossa postagem no blog da Comunidade da Esri,Introdução ao SQL Beta no AppStudio 2.0.

Para utilizar esta funcionalidade, primeiro você precisa incluir a seguinte declaração de importação:

import ArcGIS.AppFramework.Sql 1.0

Banco de Dados SQLite

O componente SqlDatabase é o componente central do complemento QML, que fornece uma grande seleção de ferramentas para criar, abrir, ler e modificar bancos de dados SQL em um aplicativo. A seguinte amostra de código cria um banco de dados SQLite em um local definido:

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

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

Component.onCompleted: {
  fileFolder.makeFolder();
  db.open();
}
Anotação:

O banco de dados criado pode ser acessado por outros aplicativos em todas as plataformas, exceto no iOS. No iOS, este banco de dados será um ambiente de teste e acessado somente pelo seu aplicativo.

Quando criado, este banco de dados está vazio, mas você pode preencher e interagir com ele utilizando o método query. A seguinte amostra de código substitui o objeto component.onCompleted na amostra de código anterior e preenche o banco de dados SQLite criado com uma tabela 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')");
}

Se a sua consulta for uma declaração selecionada, a primeira linha relevante será retornada como um objeto de JSON por padrão. Para retornar todas as linhas relevantes, você deve percorrer todas as linhas na tabela. A seguinte amostra de código retorna todas as linhas como strings de texto na tabela denominada 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();

Arquivos CSV

Os dados em arquivos CSV podem ser consultados criando uma tabela vinculada em um banco de dados SQLite. Somente os metadados (por exemplo, o nome de arquivo .csv) são armazenado no SQLite, com o conteúdo restante no arquivo CSV. O arquivo CSV pode ser um recurso incorporado de seu aplicativo ou um arquivo externo que pode ser acessado por seu aplicativo. Todas as opções suportadas pelo método FileFolder readCsvFile, exceto para dataElementAsArray, também são suportadas aqui.

A seguinte amostra de código cria uma tabela vinculada a um arquivo CSV pré-existente utilizando a Pasta de Arquivo para armazenar um caminho de arquivo adequado para o arquivo CSV. O valor :memory: para a propriedade databaseName especifica o banco de dados na memória, no qual uma lista de cidades do mundo é salva.

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