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