[Javascript] Indexed Database P.2
Ở lần trước mình có giới thiệu về [Javascript] Indexed Database hôm nay mình sẽ tiếp tục phần 2 của Indexed Database. Access vào DB Mình bổ sung thêm 1 chút về phần Access . ở phần trước mình có nói là parameter thứ 2 đó là name version version là 1 số nguyên lớn hơn 1. với name version này thì ...
Ở lần trước mình có giới thiệu về [Javascript] Indexed Database hôm nay mình sẽ tiếp tục phần 2 của Indexed Database.
Access vào DB
Mình bổ sung thêm 1 chút về phần Access . ở phần trước mình có nói là parameter thứ 2 đó là name version version là 1 số nguyên lớn hơn 1. với name version này thì chúng ta sẽ chỉnh định version được mở lên khi chúng ta truy cập vào trong DB.
Tuy nhiên nếu trường hợp chúng ta nhập parameter name version với giá trị là nhỏ hơn version hiện tại thì APP sẽ không tương thích với DB mới và sẽ có thể dẫn đến sự cố xảy ra, dẫn đến không thể mở DB lên được.
Câu hỏi đặt ra là giả sử trường hợp chúng ta muốn nâng cấp version của DB thì làm như thế nào ? . câu trả lời rất đơn giản đó là khi mà open thì chúng ta chỉ việc truyền parametter version cao hơn version hiện tại thì APP sẽ hiểu và tự động nâng cấp version hiện tại lên.
Có nghĩa là khi mà chúng ta muốn update thay đổi Spec của DB thì ở trong method open chỉ cần truyền vào số cao hơn version hiện tại của DB là được và nó sẽ tự động tạo mới version của DB cũng như chuyển đến phần version của DB đó.
Nhân tiện thì với phần parameter version chúng ta có thể hoàn toàn lược bỏ đi. khi chúng ta thực hiện mở DB theo cách thông thường thì đương nhiên version của DB sẽ không được nâng lên. có nghĩa là chúng ta sẽ mở và thao tác trên DB với version hiện tại. tuy nhiên theo quan điểm cá nhân của mình thì không nên lược bỏ version đi. mà cứ cho vào cho chắc củ.
Với phần nâng cấp phiên bản version thì mình sẽ trình bày chi tiết hơn nữa ở phần sau.
Bây giờ trường hợp chúng ta đã mở được DB lên 1 cách bình thường. thì properties result của IDBOpenDBRequest được đưa vào instant object của IDBDatabase. instant object của IDBDatabase thì nó là object và trở thành cổng vào thao tác với DB .
Sau đây chúng ta sẽ thực hiện thao tác open DB
var request = indexedDB.open("test",1); // mở DB có tên là test với version chỉ định là 1 。giá trị trả là của method open là IDBOpenDBRequest // Handle event khi mà thành công request.addEventListener("success",function(e){ console.log(request.result); //result chứa 1 object IDBDatabase }); //Handle event khi mà thất bại. request.addEventListener("error",function(e){ console.error(request.error); });
ở ví dụ chúng ta thực thi mở DB và Object IDBDatabase sẽ được hiển thị trên phần cosole.
Trước khi đi đến phần thao tác với DB thì mình sẽ giới thiệu luôn phần deleteDatabase . việc deleteDatabase thì rất đơn giản đó là chúng ta chỉ cần truyền tên của database là xong. Với giá trị trả về thì giống như method open thfi sẽ trả về ở IDBOpenDBRequest. và sẽ phát sinh 2 event là success hoặc error . thêm nữa nếu mà DB đang xử lí mà chúng ta thực hiện xóa thì . việc xóa sẽ chờ cho đến khi mà việc xử lí DB hoàn thành rồi mới xóa. trường hợp mà đang xử lí như vậy thì sẽ phát sinh ra 1 event đó là blocked .
Điều cần chú ý ở đây là mặc dù event blocked có được phát sinh đi chăng nữa thì không hẳn việc xử lí sẽ thất bại. Sau khi event blocked phát sinh thì việc xử lí sẽ được tiến hành ngay sau khi phần xử lí xóa khả thi. và đương nhiên việc xử lí xóa này cũng sẽ phát sinh 2 event đó là success hoặc error.
Tiếp đến mình sẽ nói 1 chút cơ bản về IDBDatabase. IDBDatabase thì mang 2 properties đó là name và version. với phần name thì chúng ta sẽ không thể thay đổi được có nghĩa là khi mà tạo DB thì chúng ta chỉ được phép đặt tên 1 lần duy nhất và sẽ không thể đổi tên được nữa. trừ khi chúng ta xóa đi =)) . với version thì cũng như vậy không thể đổi được version trừ khi mà chúng ta nâng cấp version lên.
Thêm nữa thì IDBDatabase cũng có cả method close . nó là method để biểu thị việc hoàn thành 1 thao tác nào đó ở trên DB hay chưa. và không có giá trị trả về của method close.
Handle the object store
Như mình đã giới thiệu ở trên DB thì được lưu ở trên Object store . chính vì thế dẫu mà có DB đi chăng nữa thì nếu ở trong DB mà k có object store thì cũng không thế nào mà lưu các record vào đó được.
trong DB thì có thể tạo được nhiều Object store. Trong Object store thì chắc chắn có thể lưu được nhiều thông tin khác nhau chính vì vậy về cơ bản theo mình thì 1 Apprication thì chỉ cần 1 DB là ổn.
Đầu tiên thì mình sẽ giới thiệu về method createObjectstore của IDBDatabase, từ tên method chúng ta dễ dàng có thể thấy được là nó dùng để tạo ra object store đúng không