Adobe AIR’de AS3 Kullanarak Birden Fazla SQL Sorgusu
Nasıl Yürütülür
Eğer Adobe AIR uygulamanızda tek bir çağrıyla birden fazla SQL ifadesini yürütmeye çalıştıysanız, hayal kırıklığı yaratan bir kısıtlama ile karşılaşmış olabilirsiniz: yalnızca ilk sorgu başarılı bir şekilde çalışıyor gibi görünmektedir. Bu blog yazısında, bu sorunu ele alacak, neden meydana geldiğini inceleyecek ve birden fazla SQL sorgusunu sorunsuz bir şekilde yürütmek için pratik ve etkili bir çözüm sunacağız.
Problem
Adobe AIR’de SQLStatement.execute()
yöntemini kullanırken, birçok geliştirici tek bir ifadede birden fazla sorguyu yürütme zorluğuyla karşı karşıya kalır. Bir veritabanı oluşturma betiği çalıştırıyorsanız veya birkaç tablo ile bir veritabanı başlatıyorsanız, her komutu teker teker yürütmek verimsiz ve zahmetli olabilir.
Örneğin, aşağıdaki SQL komutlarını düşünün; bunlar birkaç tablo oluşturmaktadır:
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
);
Bu SQL betiğini Adobe AIR’de NonQuery
fonksiyonu kullanarak yürüttüğünüzde, yalnızca ilk komut (Create Table tRole
) başarılı bir şekilde çalışır; geri kalanlar yok sayılır veya noktalı virgül (ifadenin sonunu belirten) nedeniyle başarısız olur. Bu kısıtlama geliştirme sürecini engelleyebilir ve kurulumun zahmetli olmasına neden olabilir.
Çözüm
Neyse ki, bu sorunu her bir SQL komutunu noktalı virgüllerle ayırarak ve her birini ayrı ayrı yürütmek için basit bir yöntemle aşabilirsiniz. İşte bunu adım adım nasıl yapacağınız:
Adım 1: SQL Komutlarını Dosyadan Oku
İlk olarak, SQL betiğinizi bir dizeye okuyun. Bu örnekte, dosya akışını kullanarak tüm SQL komut metnini alıyoruz.
var strSql:String = stream.readUTFBytes(stream.bytesAvailable);
Adım 2: SQL Komutlarını Ayır
Sonra, dizeyi noktalı virgülü (;
) ayırıcı olarak kullanarak bir diziye ayırın. Bu, her SQL komutunu bireysel yürütme için izole etmenizi sağlar.
var strSqlSplit:Array = strSql.split(";");
Adım 3: Her Komutu Bireysel Olarak Yürüt
Artık, dizideki her bir komut üzerinde yineleme yapmak için bir döngü kullanarak NonQuery
fonksiyonunu çağırabilirsiniz:
for (var i:Number = 0; i < strSqlSplit.length; i++) {
NonQuery(strSqlSplit[i].toString());
}
Tam Kod Örneği
İşte yukarıdaki tüm adımları içeren, RunSqlFromFile
fonksiyonunun tam değiştirilmiş versiyonu:
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());
}
}
Başarı İçin İpuçları
- Noktalı Virgül Kullanımı: Noktalı virgüllerinizle dikkatli olun. Ayırmayı etkileyebilecek ek boşluk veya karakter olmadığından emin olun.
- Hata Yönetimi: Herhangi bir SQL hatasını zarif bir şekilde yönetmek için
NonQuery
çağrılarınızı bir try-catch bloğu içine alın. - SQL Söz Dizimi: Her komut için SQL söz diziminizi iki kez kontrol ederek yürütme sırasında çalışma zamanı hatalarını önlemeye çalışın.
Sonuç
SQL sorgularınızı noktalı virgüllerle ayırarak ve bunları bireysel olarak yürüterek, Adobe AIR’de birden fazla sorguyu etkili bir şekilde yönetebilirsiniz. Bu yaklaşım yalnızca süreci kolaylaştırmakla kalmaz, aynı zamanda veritabanlarınızı kurarken yaşanacak baş ağrılarını da en aza indirir. İyi kodlamalar!