SQL

SQL(구조적 쿼리 언어)은 앱과 데이터베이스 간의 통신에 사용되는 표준 언어입니다. AppFramework Sql QML 플러그인은 SQLite, ODBC, PostgreSQL, MySQL 데이터베이스를 읽고 쓰는 도구뿐 아니라 SQLite 가상 테이블을 통해 DBF 및 CSV 파일을 읽을 수 있는 도구도 제공합니다.

이 기능에 대한 다양한 예시는 ArcGIS AppStudio의 SQL 샘플을 참고하세요. 자세한 내용 및 예시는 Esri 커뮤니티 블로그 게시물 AppStudio 2.0의 SQL 베타 소개를 참고하세요.

이 기능을 사용하려면 먼저 다음과 같은 가져오기 문을 포함시켜야 합니다.

import ArcGIS.AppFramework.Sql 1.0

SQLite 데이터베이스

SqlDatabase 컴포넌트는 앱에서 SQL 데이터베이스를 생성하고 열고 읽고 수정할 수 있는 다양한 도구를 제공하는 Sql QML 플러그인의 핵심 컴포넌트입니다. 다음 코드 샘플은 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 객체로 반환됩니다. 해당 행을 모두 반환하려면 테이블의 모든 행을 루핑해야 합니다. 다음 코드 샘플은 도로라는 테이블의 모든 행을 텍스트 문자열로 반환합니다.

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 제외)에서 지원하는 모든 옵션도 여기서 지원됩니다.

다음 코드 샘플은 FileFolder를 사용하여 기존에 있던 CSV 파일에 연결된 테이블을 생성하여 적절한 파일 경로를 해당 CSV 파일에 저장합니다. databaseName 속성에 대한 :memory: 값은 세계 도시 목록이 저장될 메모리상의 데이터베이스를 지정합니다.

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