6.3 .Cách sử dụng đối tượng DATABASE OBJECT
6.3.4 .Các giao dịch Transactions
tại sao ta sử dụng các giao dịch transactions để thay thế cho việc chỉ chạy câu lệnh SQL ? bởi vì transactions mang tới cho ta khả năng rollback.điều này có nghĩa là nếu 1 giao dịch transaction – cái mà chứa 1 hay nhiều câu lệnh SQL mà gặp thất bại thì sự cập nhật vào database khơng bao giờ được thực hiện giống như là giao dịch transaction đó chưa bao giờ xảy ra
cũng có các hàm error và success callbacks trên giao dịch transaction, do vậy ta có thể quản lý các lỗi này nhưng quan trọng nhất phải biết rằng các giao dịch transactions có khả năng khơi phục rollback lại thay đổi
Bạn cần thực thi các câu SQL trong ngữ cảnh của một transaction. Một transaction cung cấp khả năng rollback khi một trong những câu lệnh bên trong nó thực thi thất bại. Nghĩa là nếu bất kì một lệnh SQL nào thất bại, mọi thao tác thực hiện trước đó trong transaction sẽ bị hủy bỏ và database khơng bị ảnh hưởng gì cả.
Interface Database hỗ trợ hai phương thức giúp thực hiện điều này là transaction() và
readTransaction(). Điểm khác biệt giữa chúng là transaction() hỗ trợ read/write, còn readTransaction() là read-only. Như vậy sử dụng readTransaction() sẽ cho hiệu suất cao hơn nếu như bạn chỉ cần đọc dữ liệu.
Chú ý: ta sử dụng transaction() cho các câu lệnh SQL liên quan đến việc đọc ghi trong database như INSERT, REPLACE, CREATE, DROP, DELETE và để tăng hiệu suất ta sử dụng readTransaction() cho các câu lệnh truy vấn SQL chỉ liên quan tới đọc dữ liêu trong database như SELECT
void transaction(
in SQLTransactionCallback callback,
in optional SQLTransactionErrorCallback errorCallback, in optional SQLVoidCallback successCallback
);
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 83
var db = openDatabase('mydb', '1.0', 'my first database', 2 *1024 * 1024);
db.transaction(function (tx) { // here be the transaction
// do SQL magic here using the tx object });
chú ý ở đây TX là 1 đối tượng transaction object
nếu ta cần chạy tồn bộ nhóm câu lệnh truy vấn vào 1 thời điểm,, thì ta có thể tạo ra 1 gia dịch transaction, sau đó gọi ra chuỗi truy vấn như sau :
myDB.transaction(populateDB, errorDB, successDB);
function populateDB(tx) {
tx.executeSql(„DROP TABLE IF EXISTS table1‟);
tx.executeSql(„CREATE TABLE IF NOT EXISTS table1 (id unique, data varchar)‟);
tx.executeSql(„INSERT INTO table1 (id, data) VALUES (1, “testing 1”)‟);
tx.executeSql(„INSERT INTO table1 (id, data) VALUES (2, “testing 2”)‟); }
function errorDB(err) {
alert(“Error processing SQL: “+err); }
function successDB() { alert(“success!”); }
Chú ý rằng gọi 1 hàm JavaScript function để thực thi các câu lệnh truy vấn riêng biệt và bao hàm lời gọi các hàm success và error callback functions
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 84