كيفية تنفيذ استعلامات SQL متعددة في Adobe AIR باستخدام AS3

إذا كنت قد حاولت يومًا تنفيذ عدة بيانات SQL في مكالمة واحدة داخل تطبيق Adobe AIR الخاص بك، فقد تواجه قيودًا محبطة: يبدو أن الاستعلام الأول فقط هو الذي يعمل بنجاح. في هذه التدوينة، سنحلل هذه المشكلة، ونستكشف سبب حدوثها، ونوفر حلاً عمليًا وفعالًا لتنفيذ استعلامات SQL متعددة بسلاسة.

المشكلة

عند استخدام طريقة SQLStatement.execute() في Adobe AIR، يواجه العديد من المطورين challenge مشكلة تنفيذ عدة استعلامات في عبارة واحدة. إذا كنت تقوم بتشغيل نص برمجي لتوليد قاعدة البيانات أو تهيئة قاعدة بيانات تحتوي على عدة جداول، فإن تنفيذ كل أمر واحدًا تلو الآخر يمكن أن يكون غير فعال ومجهد.

على سبيل المثال، اعتبر الأوامر SQL التالية التي تنشئ عدة جداول:

Create Table tRole (
    roleID integer Primary Key,
    roleName varchar(40)
);
Create Table tFile (
    fileID integer Primary Key,
    fileName varchar(50),
    fileDescription varchar(500),
    thumbnailID integer,
    fileFormatID integer,
    categoryID integer,
    isFavorite boolean,
    dateAdded date,
    globalAccessCount integer,
    lastAccessTime date,
    downloadComplete boolean,
    isNew boolean,
    isSpotlight boolean,
    duration varchar(30)
);
Create Table tCategory (
    categoryID integer Primary Key,
    categoryName varchar(50),
    parent_categoryID integer
);

عند تنفيذ هذا النص SQL في Adobe AIR باستخدام وظيفة NonQuery، سيعمل فقط الأمر الأول (Create Table tRole) بنجاح، بينما سيتم تجاهل الباقي أو تفشل بسبب الفاصلة المنقوطة (التي تحدد نهاية البيان). يمكن أن تعيق هذه القيود عملية التطوير وتجعل الإعداد مرهقًا.

الحل

لحسن الحظ، هناك طريقة بسيطة للتعامل مع هذه المشكلة عن طريق تقسيم أوامر SQL الخاصة بك عند كل فاصلة منقوطة وتنفيذها بشكل فردي. إليك كيفية القيام بذلك خطوة بخطوة:

الخطوة 1: قراءة أوامر SQL من الملف

أولاً، تأكد من قراءة نص البرمجة SQL الخاص بك في سلسلة. يستخدم هذا المثال دفق ملف لجلب نص الأمر SQL بالكامل.

var strSql:String = stream.readUTFBytes(stream.bytesAvailable);

الخطوة 2: تقسيم أوامر SQL

ثم، قسم السلسلة إلى مصفوفة باستخدام الفاصلة المنقوطة (;) كفاصل. هذا يتيح لك عزل كل أمر SQL للتنفيذ الفردي.

var strSqlSplit:Array = strSql.split(";");

الخطوة 3: تنفيذ كل أمر بشكل فردي

الآن، استخدم حلقة للتكرار على كل أمر في المصفوفة واستدعاء وظيفة NonQuery الخاصة بك للتنفيذ:

for (var i:Number = 0; i < strSqlSplit.length; i++) {
    NonQuery(strSqlSplit[i].toString());
}

مثال كامل على الكود

إليك النسخة المعدلة الكاملة من وظيفتك RunSqlFromFile التي تدمج جميع الخطوات السابقة:

public static function RunSqlFromFile(fileName:String):void {
    var file:File = File.applicationDirectory.resolvePath(fileName);
    var stream:FileStream = new FileStream();
    stream.open(file, FileMode.READ);
    var strSql:String = stream.readUTFBytes(stream.bytesAvailable);      
    var strSqlSplit:Array = strSql.split(";");
    
    for (var i:Number = 0; i < strSqlSplit.length; i++) {
        NonQuery(strSqlSplit[i].toString());
    }
}

نصائح للنجاح

  • استخدام الفاصلة المنقوطة: كن حذرًا مع الفواصل المنقوطة الخاصة بك. تأكد من عدم وجود مسافات أو أختام زائدة بعد الفاصلة المنقوطة قد تؤثر على عملية التقسيم.
  • معالجة الأخطاء: قم بلف استدعاءات NonQuery الخاصة بك في كتلة try-catch للتعامل مع أي أخطاء SQL بشكل جيد.
  • قواعد SQL: تأكد من مراجعة قواعد SQL لكل أمر لتجنب الأخطاء التي قد تحدث أثناء التشغيل.

الخاتمة

من خلال تقسيم استعلامات SQL الخاصة بك باستخدام الفواصل المنقوطة وتنفيذها بشكل فردي، يمكنك إدارة عدة استعلامات في Adobe AIR بفعالية دون مواجهة مشاكل. لا تعمل هذه الطريقة فقط على تبسيط العملية، ولكنها أيضًا تحد من التوترات عند إعداد قواعد البيانات الخاصة بك. بالتوفيق في البرمجة!