.Cách xem 1 tập kết quả

Một phần của tài liệu tài liệu tổng quát về phonegap (Trang 84 - 86)

1 trong những thứ ta thường làm nhiều hơn thông thường, là ta sẽ làm với database là lưu trữ và cách nhận giá trị từ nó.

Phương thức giao dịch transaction cung cấp cho ta 1 hàm success callback.phương thức

executeSql() cũng cung cấp cho ta các hàm success và error callbacks.trong hàm

success callback ta sẽ nhìn thấy tập kết quả.

Nếu ta đã sử dụng và làm việc với mySQL (hay 1 vài SQL database khác), thì ta có thể nghĩ mọi việc cần làm đều giống như vậy. Những gì mà ta lấy lại từ hàm success callback là 1 đối tượng SQLResultSet object – là đối tượng chứa 3 thuộc tính sau :

insertId – đây là row ID mà câu lệnh SQL của đối tượng SQLResultSet được thêm

vào trong cơ sở dữ liệu (điều này chỉ được áp dụng nếu ta đã chạy 1 câu lệnh insert)  rowAffected – đây là số dòng được thay đổi bởi câu lệnh SQL ( điều này trả về 0

nếu khơng có dịng nào chịu tác động cũng giống như 1 câu lệnh select )  rows – đây là 1 danh sách các kết quả được lưu dưới dạng đối tượng

SQLResultSetRowList được biểu diễn dưới các dòng và được trả về

định nghĩa chung cho đối tượng SQLResultSet object được trả về bởi lệnh truy vấn select : interface SQLResultSet {

readonly attribute long insertId; readonly attribute long rowsAffected;

readonly attribute SQLResultSetRowList rows; };

Và định nghĩa chung cho thuộc tính rows – thuộc tính này là 1 kiểu đối tượng

SQLResultSetRowList :

interface SQLResultSetRowList {

readonly attribute unsigned long length;

getter any item(in unsigned long index); };

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 85

Như đã thấy ở trên item ở đây là 1 phương thức get chứ khơng phải 1 thuộc tính do vậy ta mới có cách viết results.rows.item()

trong ví dụ sau, ta chạy 1 truy vấn SQL select đơn giản và báo cáo lại những gì sẽ được trả về :

function queryDB(tx) {

tx.executeSql(„SELECT * FROM test‟, [], querySuccess, errorDB);

}

function querySuccess(tx, results) {

// this will be empty -- no rows were inserted. alert(“Insert ID = “ + results.insertId);

// this will be 0 -- select statement

alert(“Rows Affected = “ + results.rowAffected);

// the number of rows returned by the select statement alert(“# of rows = “ + results.rows.length);

}

function errorDB(err) {

alert(“Error processing SQL: “+err.code);

}

db.transaction(queryDB, errorDB);

ta có thể truy cập các giá trị được lưu trữ trong các dòng trả về này bằng cách sử dụng phương thức item().mỗi lúc ta sử dụng nó, ta sẽ lấy về 1 dịng row của dữ liệu được định nghĩa bởi chỉ mục index mà ta chuyển tiếp vào nó.ta có thể làm vài thứ với 1 đối tượng

Theo định nghĩa về SQLTransaction ở trên

SELECT * FROM test‟ là tham số bắt buộc

đầu tiên kiểu DOMString, do câu lệnh select ta cần phải nhận về kết quả nên ta phải sử dụng tham số thứ 3, do vậy tham số thứ 2 là tham số mảng array ta để là rỗng nên viết là

[], và tham số thứ 3 là querySuccess có chứa thơng tin về kết quả trả về nên buộc ta phải truyền vào phương thức

executeSql.không giống như ở trên phương

thức executeSql chỉ thực thi các lệnh

CREATE hay INSERT nên ta không quan

tâm lắm tới thông tin kết quả trả về, do vậy ta hay sử dụng nó với 1 tham số duy nhất

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 86

JavaScript object với các thuộc tính này tương ứng với các tên cột database từ câu lệnh select

do vậy để viết lại hàm querySuccess() từ ví dụ trên, ta sẽ sử dụng như sau :

function querySuccess(tx, results) { //first get the number of rows in the result set var len = results.rows.length;

for (var i=0;i<len;i++){

alert(“Row = “ + i + “ Firstname = “ + results.rows.item(i).firstname + “ Lastname = “ + results.rows.item(i).lastname);

}

}

Ví dụ trước sử dụng 1 vịng lặp for để lặp thơng qua các tập bảng ghi.vịng lặp for là 1 khởi tạo tốt ở đây bởi vì ta khơng biết có bao nhiều lần, ta phải lặp thơng qua 1 tập bản ghi, bởi vì mỗ tập bản ghi có 1 chiều dài khác nhau, phụ thuộc vào câu truy vấn và dữ liệu được lưu trữ

Để lập thông qua 1 tập bản ghi, ta phải biết độ dài của tập bản ghi này (do đó ta sử dụng

results.rows.length ).khi ta có nó, ta có thể bắt đầu ở bản ghi đầu tiên được nhận về, và

xử lý từng dòng bằng cách sử dụng results.row.item(i).field_name , tại đây field_name tương ứng với tên 1 trường field trong database

Một phần của tài liệu tài liệu tổng quát về phonegap (Trang 84 - 86)