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();
}
|
|
|