วิธีการดำเนินการ หลาย SQL Queries ใน Adobe AIR โดยใช้ AS3

หากคุณเคยพยายามดำเนินการหลายคำสั่ง SQL ในการเรียกครั้งเดียวภายในแอปพลิเคชัน Adobe AIR ของคุณ คุณอาจพบข้อจำกัดที่น่าหงุดหงิด: คำสั่งแรกเท่านั้นที่ดูเหมือนจะทำงานได้สำเร็จ ในบทความบล็อกนี้ เราจะวิเคราะห์ปัญหานี้ สำรวจเหตุผลที่ทำให้เกิดขึ้น และให้วิธีแก้ปัญหาที่มีประสิทธิภาพเพื่อตรวจสอบคำสั่ง SQL หลายคำสั่งอย่างราบรื่น

ปัญหา

เมื่อใช้เมธอด SQLStatement.execute() ใน Adobe AIR นักพัฒนาหลายคนเผชิญกับความท้าทายในการดำเนินการหลายคำสั่งในหนึ่งคำสั่ง หากคุณกำลังรันสคริปต์การสร้างฐานข้อมูลหรือการเริ่มต้นฐานข้อมูลด้วยหลายตาราง การต้องดำเนินการแต่ละคำสั่งทีละคำสั่งอาจจะไม่ให้ประสิทธิภาพหรืออาจทำให้รู้สึกยุ่งยากได้

ตัวอย่างเช่น พิจารณาคำสั่ง 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 ได้อย่างมีประสิทธิภาพโดยไม่ต้องพบกับปัญหา วิธีนี้ไม่เพียงแต่ง่ายต่อกระบวนการแต่ยังช่วยลดความยุ่งยากในการตั้งค่าฐานข้อมูลของคุณ ขอให้สนุกกับการเขียนโค้ด!