تعد لغة الاستعلامات البنائية (SQL) لغة قياسية يتم استخدامها للاتصال بين تطبيق وقاعدة بيانات. يوفر مكون AppFramework Sql QML الإضافي أدوات للقراءة والكتابة في قواعد بيانات SQLite وODBC وPostgreSQL وMySQL، وكذلك قراءة ملفي DBF وCSV عبر جداول SQLite المرئية.
لمزيد من الأمثلة عن هذه الوظائف، راجع نماذج SQL في ArcGIS AppStudio. لمزيد من المعلومات والأمثلة، راجع منشور مدونة مجتمع Esri، مقدمة حول 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 افتراضيًا. لإرجاع كل الصفوف وثيقة الصلة، يجب عليك سحب كل الصفوف في الجدول. يقوم نموذج الكود التالي بإرجاع كل الصفوف كسلاسل نصية في الجدول تحمل اسم "الطرق":
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 filename) في 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");
}