Senkronize veritabanı işlemlerini kullanma

Adobe AIR 1.0 ve üstü

Senkronize yürütmeyi kullanırken işlemleri yürütmek ve yanıtlamak için kullandığınız geçerli kodla, senkronize olmayan yürütme modunda kullandığınız kod arasında çok az fark vardır. İki yaklaşım arasındaki temel farklar iki alanda incelenebilir. Birincisi, başka bir işleme bağlı olan bir işlem yürütmektir ( SELECT sonuç satırları veya bir INSERT ifadesi tarafından eklenen satırın ana anahtarı gibi). İkinci fark alanı, hataların işlenmesidir.

Senkronize işlemler için kod yazma

Senkronize ve senkronize olmayan işlemler arasındaki temel fark, senkronize modda kodun tek bir adım serisi olarak yazılmasıdır. Senkronize olmayan kodda ise, olay dinleyicileri kaydeder ve işlemleri genellikle dinleyici yöntemleri arasında bölümlersiniz. Bir veritabanına senkronize yürütme modunda bağlanıldığında , tek bir kod bloğu içinde art arda bir veritabanı işlemleri serisi yürütebilirsiniz. Aşağıdaki örnek bu tekniği göstermektedir:

var conn:SQLConnection = new SQLConnection(); 
     
// The database file is in the application storage directory 
var folder:File = File.applicationStorageDirectory; 
var dbFile:File = folder.resolvePath("DBSample.db"); 
     
// open the database 
conn.open(dbFile, OpenMode.UPDATE); 
     
// start a transaction 
conn.begin(); 
     
// add the customer record to the database 
var insertCustomer:SQLStatement = new SQLStatement(); 
insertCustomer.sqlConnection = conn; 
insertCustomer.text = 
    "INSERT INTO customers (firstName, lastName) " +  
    "VALUES ('Bob', 'Jones')"; 
insertCustomer.execute(); 
     
var customerId:Number = insertCustomer.getResult().lastInsertRowID; 
     
// add a related phone number record for the customer 
var insertPhoneNumber:SQLStatement = new SQLStatement(); 
insertPhoneNumber.sqlConnection = conn; 
insertPhoneNumber.text =  
    "INSERT INTO customerPhoneNumbers (customerId, number) " +  
    "VALUES (:customerId, '800-555-1234')"; 
insertPhoneNumber.parameters[":customerId"] = customerId; 
insertPhoneNumber.execute(); 
     
// commit the transaction 
conn.commit(); 

Gördüğünüz gibi, senkronize veya senkronize olmayan yürütme kullandığınızda veritabanı işlemlerini gerçekleştirmek için aynı yöntemleri çağırırsınız. İki yaklaşım arasındaki temel fark, başka bir işleme bağlı olan bir işlem yürütmek ve hataların işlenmesidir.

Başka bir işleme bağlı olan bir işlem yürütme

Senkronize yürütme modunu kullandığınızda, işlemin tamamlandığını belirlemek için bir olayı dinleyen kod yazmanız gerekmez. Bunun yerine, bir kod satırındaki işlem başarıyla tamamlandığında yürütmenün bir sonraki kod satırıyla devam ettiğini varsayabilirsiniz. Sonuç olarak, başka bir işlemin başarısına bağlı olan bir işlemi gerçekleştirmek için, yalnızca bağlı olduğu işlemin hemen arkasından gelen bağımlı kodu yazmalısınız. Örneğin, bir uygulamayı bir işlem başlatmak üzere kodlamak için INSERT ifadesini yürütün, eklenen satırın ana anahtarını alın, bu ana anahtarı farklı bir tablodaki başla bir satıra ekleyin ve son olarak işlemi tamamlayın, kod bir ifadeler serisi olarak yazılabilir. Aşağıdaki örnek bu işlemleri gösterir:

var conn:SQLConnection = new SQLConnection(); 
     
// The database file is in the application storage directory 
var folder:File = File.applicationStorageDirectory; 
var dbFile:File = folder.resolvePath("DBSample.db"); 
     
// open the database 
conn.open(dbFile, SQLMode.UPDATE); 
     
// start a transaction 
conn.begin(); 
     
// add the customer record to the database 
var insertCustomer:SQLStatement = new SQLStatement(); 
insertCustomer.sqlConnection = conn; 
insertCustomer.text = 
    "INSERT INTO customers (firstName, lastName) " +  
    "VALUES ('Bob', 'Jones')"; 
insertCustomer.execute(); 
     
var customerId:Number = insertCustomer.getResult().lastInsertRowID; 
     
// add a related phone number record for the customer 
var insertPhoneNumber:SQLStatement = new SQLStatement(); 
insertPhoneNumber.sqlConnection = conn; 
insertPhoneNumber.text =  
    "INSERT INTO customerPhoneNumbers (customerId, number) " +  
    "VALUES (:customerId, '800-555-1234')"; 
insertPhoneNumber.parameters[":customerId"] = customerId; 
insertPhoneNumber.execute(); 
     
// commit the transaction 
conn.commit(); 

Hataları senkronize yürütme ile işleme

Senkronize yürütme modunda, bir işlemin başarısız olduğunu belirlemeniz için herhangi bir hata olayını dinlemeniz gerekmez. Bunun yerine, bir try..catch..finally kod blokları serisinde hataları tetikleyebilecek olan herhangi bir kodu sararsınız. Try bloğunda hata veren kodu sararsınız. Ayrı catch bloklarındaki her hata türüne yanıt olarak gerçekleştirilecek eylemleri yazın. Başarı veya hatadan bağımsız olarak her zaman yürütülmesini istediğiniz herhangi bir kodu (örneğin, artık gerek duyulmayan bir veritabanı bağlantısını kapatma) bir finally bloğuna yerleştirin. Aşağıdaki örnek hata işleme için try..catch..finally bloklarının kullanımını gösterir. Önceki örneği hata işleme kodu ekleyerek devam ettirir:

var conn:SQLConnection = new SQLConnection(); 
     
// The database file is in the application storage directory 
var folder:File = File.applicationStorageDirectory; 
var dbFile:File = folder.resolvePath("DBSample.db"); 
     
// open the database 
conn.open(dbFile, SQLMode.UPDATE); 
     
// start a transaction 
conn.begin(); 
     
try 
{ 
    // add the customer record to the database 
    var insertCustomer:SQLStatement = new SQLStatement(); 
    insertCustomer.sqlConnection = conn; 
    insertCustomer.text = 
        "INSERT INTO customers (firstName, lastName)" +  
        "VALUES ('Bob', 'Jones')"; 
     
    insertCustomer.execute(); 
     
    var customerId:Number = insertCustomer.getResult().lastInsertRowID; 
     
    // add a related phone number record for the customer 
    var insertPhoneNumber:SQLStatement = new SQLStatement(); 
    insertPhoneNumber.sqlConnection = conn; 
    insertPhoneNumber.text =  
        "INSERT INTO customerPhoneNumbers (customerId, number)" +  
        "VALUES (:customerId, '800-555-1234')"; 
    insertPhoneNumber.parameters[":customerId"] = customerId; 
     
    insertPhoneNumber.execute(); 
     
    // if we've gotten to this point without errors, commit the transaction 
    conn.commit(); 
} 
catch (error:SQLError) 
{ 
    // rollback the transaction 
    conn.rollback(); 
}