Yerel SQL veritabanları hakkında

Adobe AIR 1.0 ve üstü

SQL veritabanlarının kullanmakla ilgili hızlı açıklama ve kod örnekleri için aşağıda bulunan Adobe Geliştirici Bağlantısı'ndaki hızlı başlatma makalelerine bakın.

Adobe AIR, AIR uygulamasının çalıştığı bilgisayardaki veritabanı dosyalarında yerel olarak saklanan verileri içeren çalışma zamanında çalışan SQL tabanlı ilişkisel bir veritabanı motoru içerir (örneğin, bilgisayarın sabit sürücüsünde). Veritabanı yerel olarak çalıştığı ve veri dosyaları yerel olarak saklandığı için, bir veritabanı AIR uygulaması tarafından ağ bağlantısının kullanılabilir olup olmadığına bakılmaksızın kullanılabilir. Bu nedenle, çalışma zamanının yerel SQL veritabanı motoru, özellikle SQL ve ilişkisel veritabanlarlarına ilişkin deneyiminiz varsa, kalıcı, yerel uygulama verilerinin saklanması için uygun bir mekanizma sağlar.

Yerel SQL veritabanları için kullanımlar

AIR yerel SQL veritabanı işlevi, uygulama verilerini kullanıcının yerel bilgisayarında saklamak isteyebileceğiniz tüm amaçlar için kullanılabilir. Adobe AIR, verilerin yerel olarak saklanması için, her biri farklı avantajlara sahip çeşitli mekanizmalar içerir. AIR uygulamanızdaki yerel SQL veritabanı için bazı olası kullanımlar şunlardır:

  • Veritabanı, veri odaklı bir uygulama (örneğin bir adres defteri) için ana uygulama verilerini saklamak amacıyla kullanılabilir.

  • Kullanıcıların kaydetmek ve belki de paylaşmak için belgeler oluşturduğu belge odaklı uygulamalar için, belgeler kullanıcının belirlediği konumda bir veritabanı dosyası olarak kaydedilebilir. (Ancak, veritabanı şifreli olmadıkça herhangi bir AIR uygulamasının veritabanı dosyasını açabileceğini dikkate alın. Şifreleme, duyarlı olabilecek belgeler için önerilir.)

  • Veritabanı, ağ kullanan bir uygulama için uygulama verilerinin yerel önbelleğini saklamak veya ağ bağlantısı kullanılabilir olmadığında verileri geçici olarak saklamak üzere kullanılabilir. Yerel veritabanını ağ veri deposuyla senkronize etmek için bir mekanizma oluşturabilirsiniz.

  • Veritabanı, herhangi bir uygulama için tek bir kullanıcının uygulama ayarlarını, örneğin pencere boyutu ve konumu gibi kullanıcı seçenekleri ve uygulama bilgisini saklamak üzere kullanılabilir.

AIR veritabanları ve veritabanı dosyaları hakkında

Tek bir Adobe AIR yerel SQL veritabanı, bilgisayarın dosya sisteminde tek bir dosya olarak saklanır. Çalışma zamanı, veritabanı dosyalarının oluşturulup yapılandırılmasını, verilerin bir veritabanı dosyasından alınması ve değiştirilmesini yöneten bir SQL veritabanı motoru içerir. Çalışma zamanı, veritabanı verilerinin dosya sisteminin neresinde ve nasıl saklandığını belirtmez; bunun yerine, her veritabanının tamamı tek bir dosyada saklanır. Veritabanı dosyasının saklandığı dosya ssitemindeki konumu siz belirlersinz. Tek bir AIR uygulaması bir veya daha çok ayrı veritabanına erişebilir. (Bunlar, ayrı veritabanı dosyalarıdır.) Çalışma zamanı her veritabanını dosya sisteminde tek bir dosya olarak sakladığından, veritabanınızı uygulamanızın tasarımının ve işletim sistemi dosya erişim sınırlamalarının gerektirdiği şekilde konumlandırabilirsiniz. Her kullanıcı, özel verileri için ayrı bir veritabanı dosyasına sahiptir veya paylaşılan veriler için tek bir bilgisayardaki tüm uygulama kullanıcıları veritabanı dosyasına erişebilir. Veriler tek bir bilgisayar için yerel olduğundan, farklı bilgisayarlardaki kullanıcılar tarafından otomatik olarak paylaşılmaz. Yerel SQL veritabanı motoru, uzak veya sunucu tabanlı bir veritabanına karşı SQL ifadelerinin yürütülmesi için herhangi bir özellik sağlamaz.

İlişkisel veritabanları hakkında

İlişkisel veritabanı, verilerin bir bilgisayarda saklanmasına (ve geri alınmasına) yönelik bir mekanizmadır. Veriler, tablolar halinde düzenlenir: satırlar kayıtları veya öğeleri temsil eder ve sütunlar (bazen “alanlar” da denir) her kaydı ayrı ayrı değerlere böler. Örneğin, adres defteri uygulaması bir “arkadaşlar” tablosu içerebilir. Tablodaki her satır, veritabanında saklanan tek bir arkadaşı temsil edecektir. Tablonun sütunları, ad, soyad, doğum tarihi vb. gibi verileri temsil eder. Veritabanı, tablodaki her arkadaş satırına ilişkin her sütun için ayrı bir değer saklar.

İlişkisel veritabanları, bir öğenin başka türden öğelerle ilişkilendirilmiş veya başka türden öğelerle olduğu karmaşık verilerin saklanması için tasarlanmıştır. İlişkisel bir veritabanında, bire çok ilişkiye sahip —tek bir kaydın farklı türdeki birden çok kayıtla ilişkilendirilebildiği —veriler farklı tablolar halinde bölümlenmelidir. Örneğin, adres defteri uygulamanızın her arkadaş için birden çok telefon numarası saklamasını istediğinizi varsayın; bu, bire çok ilişkidir. “Arkadaşlar” tablosu, her arkadaş için tüm kişisel bilgileri içerecektir. Ayrı bir “telefon numaraları” tablosu, tüm arkadaşlara ilişkin tüm telefon numaralarını içerir.

Arkadaşlara ve telefon numaralarına ilişkin verileri saklamanın yanı sıra, her tablo, iki tablo arasındaki ilişkiyi izlemek için—ayrı ayrı arkadaş kayıtlarını telefon numaralarıyla eşlemek için bir veri parçasına ihtiyaç duyacaktır. Bu veri, ana anahtar—tablodaki her satırı bu tablodaki diğer satırlardan ayırt eden benzersiz bir kimlik olarak bilinir. Ana anahtar, tablodaki her kaydı doğal olarak ayırt eden veri öğelerinden biri olduğu anlamına gelen “doğal anahtar” olabilir. Hiçbir arkadaşınızın aynı doğum tarihini paylaşmadığını biliyorsanız, “arkadaşlar” tablosunda doğum tarihi sütununu ana anahtar (doğal anahtar) olarak kullanabilirsiniz. Doğal anahtar yoksa, “arkadaş kimliği“ gibi, uygulamanın satırları ayırt etmek için kullanacağı yapay bir değer olan ayrı bir ana anahtar sütunu oluşturabilirsiniz.

Ana anahtarı kullanarak birden çok tablo arasında ilişkiler kurabilirsiniz. Örneğin, “arkadaşlar” tablosunun her satır (her arkadaş) için benzersiz bir numara içeren bir “arkadaş kimliği” sütununa sahip olduğunu düşünün. İlgili “telefon numaraları” tablosu, iki sütunla yapılandırılabilir: telefon numarasının ait olduğu arkadaşın “arkadaş kimliği” bilgisini içeren sütun ve geçerli telefon numarasını içeren sütun. Bu şekilde, tek bir arkadaş kaç telefon numarasına sahip olursa olsun, bunların tümü “telefon numaraları tablosunda saklanabilir ve “arkadaş kimliği” ana anahtarı kullanılarak ilgili arkadaşa bağlanabilir. Bir tablodaki ana anahtar, ilgili bir tabloda kayıtlar arasındaki bağlantıyı belirtmek üzere kullanıldığında, ilgili tablodaki değer yabancı anahtar olarak bilinir. Birçok veritabanıın aksine, AIR yerel veritabanı motoru, eklenen veya güncellenen yabancı anahtara ana anahtar tablosunda karşılık gelen bir satırın bululup bulunmadığını otomatik olarak kontrol eden sınırlamalar olan yabancı anahtar sınırlamaları oluşturmanıza olanak vermez. Yine de, yabancı anahtar ilişkileri ilişkisel veritabanı yapısının önemli bir parçasıdır ve veritabanınızdaki tablolar arasında ilişki oluştururken yabancı anahtarlar kullanılmalıdır.

SQL hakkında

Yapılandırılmış Sorgu Dili (Structured Query Language - SQL) verileri değiştirmek ve getirmek için ilişkisel veritabanlarıyla kullanılır. SQL, yordam temelli bir dilden çok, tanımlayıcı bir dildir. Bir SQL ifadesi, verilerin nasıl getirileceğine ilişkin bilgisayar talimatları vermek yerine, istediğiniz veri kümesini açıklar. Veritabanı motoru, verilerin nasıl getirileceğini belirler.

SQL dili, American National Standards Institute (ANSI) tarafından standartlaştırılmıştır. Adobe AIR yerel SQL veritabanı SQL-92 standardının büyük bölümünü destekler.

Adobe AIR'de desteklenen SQL dilinin belirleyici açıklamaları için bkz. yerel veritabanlarında SQL desteği.

SQL veritabanı sınıfları hakkında

ActionScript 3.0'da yerel SQL veritabanlarıyla çalışmak için bu sınıfların flash.data paketindeki örneklerini kullanırsınız:

Sınıf

Açıklama

flash.data.SQLConnection

Veritabanları (veritabanı dosyaları) oluşturma ve açmaya yönelik yolların yanı sıra, veritabanı düzeyinde işlemler gerçekleştirmek ve veritabanı işlemlerini denetlemek için yöntemler sağlar.

flash.data.SQLStatement

İfade metninin tanımlanması ve parametre değerlerinin ayarlanması dahil, veritabanında yürütülen tek bir SQL ifadesini (tek bir sorgu veya komut) temsil eder.

flash.data.SQLResult

SELECT ifadesinden sonuç satırları, UPDATE veya DELETE ifadesinden etkilenen bir dizi satır vb. ifadelerin yürütülmesinden doğan sonuçların ve bu yürütmelere ilişkin bilgilerin getirilmesi için bir yol sağlar.

Veritabanı yapısını açıklayan şema bilgilerini elde etmek için flash.data paketindeki şu sınıfları kullanırsınız:

Sınıf

Açıklama

flash.data.SQLSchemaResult

SQLConnection.loadSchema() yönteminin çağrılmasıyla oluşan veritabanı şeması sonuçları için kap görevi yapar.

flash.data.SQLTableSchema

Veritabanındaki tek bir tabloyu açıklayan bilgiyi sağlar.

flash.data.SQLViewSchema

Veritabanındaki tek bir görünümü açıklayan bilgiyi sağlar.

flash.data.SQLIndexSchema

Veritabanındaki tek bir tablo veya görünüm sütununu açıklayan bilgiyi sağlar.

flash.data.SQLTriggerSchema

Veritabanındaki tek bir tetikleyiciyi açıklayan bilgiyi sağlar.

flash.data paketindeki diğer sınıflar, SQLConnection sınıfı ve SQLColumnSchema sınıfıyla kullanılan sabitleri sağlar:

Sınıf

Açıklama

flash.data.SQLMode

SQLConnection.open() ve SQLConnection.openAsync() yöntemlerinin openMode parametresi için olası değerleri temsil eden bir dizi sabiti tanımlar.

flash.data.SQLColumnNameStyle

SQLConnection.columnNameStyle özelliği için olası değerleri temsil eden bir dizi sabiti tanımlar.

flash.data.SQLTransactionLockType

SQLConnection.begin() yönteminin seçenek parametresi için olası değerleri temsil eden bir dizi sabiti tanımlar.

flash.data.SQLCollationType

SQLColumnSchema() yapıcısının SQLColumnSchema.defaultCollationType özelliği ve defaultCollationType parametresi için olası değerleri temsil eden bir dizi sabiti tanımlar.

Ayrıca, flash.events paketinde bulunan aşağıdaki sınıflar kullandığınız olayları (ve desteklenen sabitleri) temsil eder:

Sınıf

Açıklama

flash.events.SQLEvent

İşlemlerinden herhangi biri başarıyla yürütüldüğünde SQLConnection veya SQLStatement örneklerinin gönderdiği olayları tanımlar. Her işlem, SQLEvent sınıfında tanımlanmış, ilişkili bir olay türüne sahiptir.

flash.events.SQLErrorEvent

İşlemlerinden herhangi biri hatayla sonuçlandığında, SQLConnection veya SQLStatement örneklerinin gönderdiği olayı tanımlar.

flash.events.SQLUpdateEvent

Bağlı veritabanlarından birinde yer alan tablo verileri, yürütülen bir INSERT, UPDATE veya DELETE SQL ifadesinin sonucu olarak değiştiğinde SQLConnection örneğinin gönderdiği olayı tanımlar.

Son olarak, flash.errors paketinde yer alan aşağıdaki sınıflar, veritabanı işlem hataları hakkında bilgi sağlar:

Sınıf

Açıklama

flash.errors.SQLError

Gerçekleştirilmeye çalışılan işlem ve hatanın nedeni dahil, veritabanı işlemi hatası hakkında bilgi sağlar.

flash.errors.SQLErrorOperation

Hatayla sonuçlanan veritabanı işlemini gösteren SQLError sınıfının operation özelliği için olası değerleri temsil eden bir dizi sabiti tanımlar.

Senkronize ve senkronize olmayan yürütme modları hakkında

Yerel SQL veritabanıyla çalışmak üzere bir kod yazdığınızda, bu veritabanı işlem yürütmesini iki yürütme modundan birinde belirlersiniz: senkronize olmayan veya senkronize yürütme modu. Kod örnekleri genellikle ihtiyaçlarınıza en uygun olan örneği kullanabilmeniz için, her bir işlemin her iki yolla da nasıl gerçekleştirileceğini gösterir.

Senkronize olmayan yürütme modunda, çalışma zamanına bir talimat verirsiniz ve istediğiniz işlem tamamlandığında veya başarısız olduğunda çalışma zamanı bir olay gönderir. Önce veritabanı motoruna bir işlem gerçekleştirmesini söylersiniz. Uygulama çalışmaya devam ederken, veritabanı motoru işini arka planda yapar. Son olarak, veritabanı motoru işlem tamamlandığında (veya başarısız olduğunda) bir olay gönderir. Olay tarafından tetiklenen kodunuz, sonraki işlemleri gerçekleştirir. Bu yaklaşımın önemli bir faydası vardır: ana uygulama kodu çalışmaya devam ederken, çalışma zamanı veritabanı işlemlerini arka planda gerçekleştirir. Veritabanı işlemi büyük ölçüde zaman alırsa, uygulama çalışmaya devam eder. En önemlisi, kullanıcı ekranı dondurmadan uygulamayla etkileşim kurmaya devam edebilir. Yine de, senkronize olmayan işlem kodunun yazılması diğer kodlara göre daha karmaşık olabilir. Bu karmaşıklık, genellikle çoklu bağımlı işlemlerin çeşitli olay dinleyici yöntemlerine bölümlenmesi gerektiği durumlarda mevcuttur.

Kavramsal olarak, işlemleri birkaç olay dinleyici yöntemine bölünmüş bir işlem kümesi yerine, tek bir adım sırası—bir senkronize işlemler kümesi—olarak kodlamak daha kolaydır. Senkronize olmayan veritabanı işlemlerine ek olarak, Adobe AIR veritabanı işlemlerini senkronize olarak yürütmenize de olanak verir. Senkronize yürütme modunda, işlemler arka planda çalışmaz. Bunun yerine, diğer tüm uygulama kodları gibi aynı yürütme sırasında çalışır. Veritabanı motoruna bir işlem gerçekleştirmesini söylersiniz. Daha sonra, veritabanı motoru işini yaparken, kod bu noktada duraklar. İşlem tamamlandığında, yürütme sonraki kod satırıyla devam eder.

İşlemlerin senkronize olmayan veya senkronize biçimde yürütüleceği, SQLConnection düzeyinde ayarlanır. Tek bir veritabanı bağlantısı kullanarak bazı işlemler ve ifadeleri senkronize, diğerlerini senkronize olmayan biçimde yürütemezsiniz. Veritabanını açmak için SQLConnection yöntemini çağırarak, SQLConnection öğesinin senkronize veya senkronize olmayan yürütme modunda çalışacağını belirlersiniz. SQLConnection.open() yöntemini çağırırsanız, bağlantı senkronize yürütme modunda, SQLConnection.openAsync() yöntemini çağırırsanız senkronize olmayan yürütme modunda çalışır. SQLConnection örneği, open() veya openAsync() kullanılarak bir veritabanına bağlandığında, veritabanı bağlantısını kapatıp açmadığınız sürece, senkronize veya senkronize olmayan yürütme moduna sabitlenir.

Her yürütme modunun kendi faydaları vardır. Modların çoğu yönü birbirine benzese de, her bir modda çalışırken aklınızda bulundurmak isteyeceğiniz bazı farklar vardır. Bu başlıklar hakkında daha fazla bilgi ve her bir modda çalışmaya ilişkin öneriler için bkz. Senkronize ve senkronize olmayan veritabanı işlemlerini kullanma.