Senkronize olmayan yürütme modunun kullanımına ilişkin yaygın bir kanı, aynı veritabanı bağlantısına karşı başka bir
SQLStatement
örneğini başlatmayacak olmanıza ilişkin varsayımdır. Gerçekte, bu varsayım doğru değildir. SQLStatement örneği yürütülürken ifadenin
text
özelliğini değiştiremezsiniz. Ancak, yürütmek istediğiniz her farklı SQLStatement örneği için ayrı bir SQLStatement örneği kullanırsanız, başka bir SQLStatement örneği hala yürütülüyorken hataya neden olmadan
execute()
yöntemini çağırabilirsiniz.
Dahili olarak, veritabanı işlemlerimi senkronize olmayan yürütme modunu kullanarak yürüttüğünüzde, her veritabanı bağlantısı (her
SQLConnection
örneği) gerçekleştirme talimatını verdiğiniz kendi işlem kuyruğu veya listesine sahiptir. Çalışma zamanı her işlemi kuyruğa eklendikleri sırayla yürütür. Bir SQLStatement örneği oluşturduğunuzda ve bu örneğin
execute()
yöntemini çağırdığınızda, ifade yürütme işlemi bağlantı için kuyruğa eklenir. Bu SQLConnection örneğinde o anda yürütülen bir işlem yoksa, ifade arka planda yürütülmeye başlar. Kodla aynı blok içinde başka bir SQLStatement örneği oluşturduğunuzu ve bu yöntemin
execute()
yöntemini de çağırdığınızı varsayın. Bu ikinci ifade yürütme işlemi, kuyrukta ilk ifadenin arkasına eklenir. İlk ifadenin yürütülmesi tamamlanır tamamlanmaz, çalışma zamanı kuyruktaki bir sonraki işleme geçer. Ana uygulama kodunda ilk işleme ilişkin
result
olayının gönderildiği sırada bile, kuyrukta yer alan sonraki işlemlerin yürütülmesi arka planda devam eder. Aşağıdaki kod bu tekniği gösterir:
// Using asynchronous execution mode
var stmt1:SQLStatement = new SQLStatement();
stmt1.sqlConnection = conn;
// ... Set statement text and parameters, and register event listeners ...
stmt1.execute();
// At this point stmt1's execute() operation is added to conn's execution queue.
var stmt2:SQLStatement = new SQLStatement();
stmt2.sqlConnection = conn;
// ... Set statement text and parameters, and register event listeners ...
stmt2.execute();
// At this point stmt2's execute() operation is added to conn's execution queue.
// When stmt1 finishes executing, stmt2 will immediately begin executing
// in the background.
Ardarda kuyruğa alınan ifadeleri otomatik olarak yürüten veritabanının önemli bir yan etkisi vardır. Bir ifade başka bir işlemin sonucuna bağlıysa, ilk işlem tamamlanana kadar bu ifadeyi kuyruğa ekleyemezsiniz. (Başka bir deyişle, bu ifadenin
execute()
yöntemini çağıramazsınız.) Çünkü ikinci ifadenin
execute()
yöntemini bir kez çağırdığınızda, ifadenin
text
veya
parameters
özelliklerini değiştiremezsiniz. Bu durumda sonraki işlemi başlatmak için, ilk işlemin tamamlandığını gösteren olayı beklemeniz gerekir. Örneğin, işlem bağlamında bir ifade yürütmek istiyorsanız, ifadenin yürütülmesi işlemi açma işlemine bağlıdır. İşlemi açmak için
SQLConnection.begin()
yöntemini çağırdıktan sonra SQLConnection örneğinin
begin
olayını göndermesini beklemeniz gerekir. Daha sonra SQLStatement örneğinin
execute()
yöntemini çağırabilirsiniz. Bu örnekte uygulamayı işlemlerin düzgün biçimde yürütülmesini sağlayacak biçimde düzenlemenin en basit yolu,
begin
olayı için dinleyici olarak kaydedilen bir yöntem oluşturmaktır.
SQLStatement.execute()
yöntemini çağıracak kod, bu dinleyici yönteminin içine yerleştirilir.