SQL

Язык Структурированных Запросов (Structured Query Language – SQL) – это стандартный язык, используемый для взаимодействия между приложением и базой данных. Плагин AppFramework Sql QML предоставляет инструменты для чтения и записи в базы данных SQLite, ODBC, PostgreSQL и MySQL, а также для чтения файлов DBF и CSV посредством виртуальных таблиц SQLite.

Ещё больше примеров этой функциональной возможности см. примеры SQL в ArcGIS AppStudio. Дополнительные сведения и примеры см. в публикации в блоге Esri Community Обзор SQL Beta в AppStudio 2.0.

Чтобы использовать эту функциональность, вы сначала должны включить следующие утверждения импорта:

import ArcGIS.AppFramework.Sql 1.0

База данных SQLite

Компонент SqlDatabase является центральным компонентом плагина Sql QML, предоставляющим обширный набор инструментов для создания, открытия, чтения и изменения без данных SQL в приложении. Следующий пример кода создаёт базу данных SQLite и устанавливает местоположение:

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

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

Component.onCompleted: {
  fileFolder.makeFolder();
  db.open();
}
Примечание:

К созданной базе данных можно получить доступ из других приложений на всех платформах, кроме iOS. В iOS эта база данных будет в «песочнице» и доступна только из вашего приложения.

После создания эта база данных пустая, но вы можете её заполнить и взаимодействовать с ней при помощи метода query. Следующий пример кода замещает объект component.onCompleted из предыдущего примера кода и заполняет созданную баз данных SQLite таблицей со значениями:

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

Если ваш запрос – это выражение выборки, первое релевантное значение возвращается как объект JSON по умолчанию. Чтобы вернуть все релевантные строки, надо зациклить через все строки в таблице. Следующий пример кода возвращает все строки как текстовые в таблице с названием 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();

Файлы CSV

Запросы к данным в файлах CSV можно осуществлять путём создания связанных таблиц в базе данных SQLite. Только метаданные (например, имя файла .csv) хранятся в SQLite, с содержанием, остающимся в файле CSV. Файл CSV может быть либо внедрённым ресурсом в ваше приложение, либо внешним файлом, доступ к которому есть у вашего приложения. Все опции, которые поддерживаются методом FileFolder readCsvFile, кроме dataElementAsArray, также поддерживаются здесь.

Следующий пример кода создаёт связанную таблицу для предварительно существующего файла CSV, используя FileFolder для хранения подходящего пути к файлу CSV. Значение :memory: для свойства databaseName указывает базу данных в памяти, где сохраняется список городов мира.

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

В этом разделе
  1. База данных SQLite
  2. Файлы CSV