Senkronize veritabanı işlemlerini kullanmaAdobe 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 yazmaSenkronize 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ütmeSenkronize 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şlemeSenkronize 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(); } |
|